ASP.NET Шаблон проектирования MVC — Репозиторий и классы данных — Какова наилучшая практика?

#asp.net-mvc #design-patterns

#asp.net-mvc #шаблоны проектирования

Вопрос:

У меня есть проект с ASP.NET MVC, использующий Entity Framework для получения данных из базы данных SQL.

Я разработал классы данных, которые содержат такую информацию, как статистика (класс объединяет идентификатор продукта, его записи, который является подклассом), а затем я понял, что для размещения данных в этих классах мне потребуется набор функций для извлечения данных из SQL и передачи вклассы данных.

Затем я нашел метод репозитория и хотел спросить, это просто набор функций, который удерживает бизнес-логику в одном месте? Или это сложнее, чем это? У меня есть интерфейс для этого, а затем реализация.

Комментарии:

1. Также вы можете порекомендовать другие шаблоны для рассмотрения.

Ответ №1:

Идея репозитория состоит в том, чтобы предоставить вашему коду одно место, куда они могут пойти, чтобы извлекать данные из некоторого постоянного хранилища (в большинстве случаев из вашей базы данных). Ваша бизнес-логика будет находиться на другом уровне.

Репозиторий может предлагать простые функции создания, чтения, обновления и удаления (CRUD) или более специфические функции для извлечения или обновления данных.

Другие шаблоны, на которые вы можете обратить внимание, — это UnitOfWork (примером этого является ObjectContext, используемый в Entity Framework) и шаблоны многоуровневого проектирования, которые показывают вам, как отделить код доступа к данным от вашего бизнес-кода.

Вы уже упоминали об отделении интерфейса от реализации. Кодирование для интерфейса также является хорошей практикой.

Здесь вы можете найти дополнительную информацию. PEAA также содержит другие отличные описания шаблонов проектирования и как их использовать.

Ответ №2:

У меня есть интерфейс для этого, а затем реализация

Это в значительной степени так. Вы определяете набор операций, которые хотите выполнить с вашими бизнес-объектами в интерфейсе, а затем реализуете этот интерфейс для определенного метода доступа к данным. Тогда ваш ASP.NET Контроллеры MVC принимают этот интерфейс в качестве аргумента конструктора.

Ответ №3:

Репозитории — это классы не для бизнес-логики, а для логики сохранения данных. У вас должен быть еще один уровень с бизнес-логикой. В репозиториях у вас должны быть такие методы, как findById, findByName, Update(Entity entity)… Операции с репозиториями обычно работают с объектами в памяти, и когда вы хотите сохранить свои изменения, вы вызываете Commit (или что-то похожее) для вашего объекта контекста данных — этот подход называется единицей работы.

Здесь вы можете найти хорошую бесплатную книгу о шаблонах проектирования на .NET platoform (включая MVC, шаблон репозитория EF).

Комментарии:

1. Хм, вся моя бизнес-логика — это просто сортировка продуктов, получение требуемой статистики и т. Д. Так что там не так много логики, кроме как иногда их подсчитывать, это просто приложение для статистики в интрасети.

2. Хорошо, но, возможно, в будущем вам придется реализовать еще какую-то бизнес-логику и куда вы ее поместите? На уровне данных? На уровне представления? Это не очень хорошая практика. Я думаю, что всегда лучше иметь как минимум 3 уровня — представление, домен (бизнес-логика), уровень данных. Может быть, если у вас действительно маленькое приложение, и вы знаете, что оно всегда будет маленьким, вам не нужно следовать этим шаблонам и практикам.