Является ли это хорошей практикой и имеет ли она смысл для операций CRUD? [закрыто]C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Является ли это хорошей практикой и имеет ли она смысл для операций CRUD? [закрыто]

Сообщение Anonymous »


Это мое первое CRUD-приложение, и я пытаюсь определить лучший способ реализовать чистую архитектуру для доступа к более чем 20 таблицам, которые сейчас есть в моей базе данных. Я использую Dapper, так как хочу развить свои навыки SQL и столкнулся с проблемой структурирования слоев сервиса и репозитория. Я знаю, что мог бы просто написать методы для вставок, удалений и т. д. внутри соответствующих интерфейсов и реализаций и покончить с этим, но я хочу написать это приложение, используя лучшие практики, и поэтому попытался углубиться в использование интерфейсов. Проблема, с которой я столкнулся, заключается в том, что при определении интерфейса IBaseRepository, содержащего методы Insert, Get, GetAll и т. д., я столкнулся с проблемой, заключающейся в том, что некоторые из моих репозиториев не должны иметь метод «Удалить» или «Обновить», как должно быть. у меня нет причин редактировать или удалять какие-либо строки из таблицы аудита или журнала.

Прежде чем пытаться внести какие-либо изменения, это была общая схема базового репозитория.

публичный интерфейс ICompanyRepository { Task GetCompanyModelsAsync(); Task DeleteCompanyAsync(int CompanyId); Task GetCompanyModelAsync(int CompanyId); Task UpdateCompanyAsync(CompanyModel CompanyModel); } публичный класс CompanyRepository: ICompanyRepository { частная IConfiguration _config только для чтения; общедоступный CompanyRepository (конфигурация IConfiguration) { _config = конфигурация; } общедоступная асинхронная задача DeleteCompanyAsync (int CompanyId) { использование соединения IDbConnection = new SqlConnection(_config.GetConnectionString("Default")); строковый запрос = «УДАЛЕНИЕ ИЗ Компании ГДЕ Id = @CompanyId»; параметры вар = новый {CompanyId = CompanyId}; пытаться { int rows = await Connection.ExecuteAsync(запрос, параметры); если (строки > 0) { вернуть ОперацияРезультат.Успех(); } еще { вернуть OperationResult.DeleteWithNoRowsEffected(); } } catch (исключение ex) { Log.Error(ex, «Ошибка удаления компании {companyId}.», CompanyId); return OperationResult.Failure($"Произошла ошибка: {ex.Message}"); } } ... Чтобы решить мою проблему, я решил создать различные подинтерфейсы, которые будут реализованы интерфейсами IRepository. Вот подинтерфейсы:

публичный интерфейс ICreatableTableRepository { Task CreateModelAsync (модель T); } общедоступный интерфейс IDeletableTableRepository { Task DeleteModelAsync(int id); } общедоступный интерфейс IFetchableTableRepository { Task GetModelsAsync(); Task GetModelAsync(int id); } общедоступный интерфейс ImutableTableRepository { Task UpdateModelAsync (модель T); } И вот пример того, как я бы использовал их в репозитории, в котором никогда не следует удалять или изменять строки.

публичный интерфейс ILocationUploadRepository: IFetchableTableRepository, ICreatableTableRepository { } Сценарий, который хорошо описывает мою проблему и который, вероятно, уже встречался много раз, — это выполнение операций CRUD над статическими таблицами, которые просто эмулируют Enums. В этом случае определение метода удаления, который наверняка создаст исключение ограничения внешнего ключа для каждой строки, кажется бессмысленным. Но определение метода создания очень разумно и, следовательно, не вписывается в класс, доступный только для выборки или только для записи, а скорее в смесь.

Я не усложняю свою кодовую базу или это полезно? Опять же, это мое первое приложение, поэтому у меня практически нет опыта разработки полноценных проектов, и мне нужны отзывы.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»