Многоуровневая архитектура с использованием Entity Framework 4 и Repository Pattern - PullRequest
3 голосов
/ 12 октября 2011

Мне нужно построить архитектуру веб-приложения, используя Entity Framework 4.1 и ASP.NET.У меня уже есть структура базы данных, поэтому я должен использовать кулак базы данных.Я прочитал много статей и тем здесь, но мне кажется, что я что-то упустил.Я решил организовать проекты следующим образом:

Я спроектировал веб-приложение с Linq2Sql.Я использовал этот проект .Он предоставляет шаблон T4, который генерирует определенный класс статического репозитория для каждой сущности.Мне нравится такой подход, так как в любой репозиторий легко добавить дополнительную логику, например GetUserByName().Мне нравится этот подход, но я пока не могу найти аналогичный подход для EF4.Я нашел только общие репозитории, а затем я должен вручную создать конкретные репозитории.Что мне не нравится в этом случае, так это то, что во-первых, у меня есть приложение, над которым я работаю, с немного сложной бизнес-логикой, поэтому мне придется вручную создавать конкретные репозитории почти для каждой сущности.Во-вторых, если сначала я использую общий репозиторий для получения всех сущностей, а позже мне нужно будет использовать, например, GetUserByName(), тогда в коде будет несогласованность.Я бы предпочел, чтобы все данные были получены одинаково.

Я либо что-то упустил в структуре архитектуры.

  • Generic: универсальный репозиторий, если необходимо разделить

  • DAL: файл EDMX (Entity Model) с классом контекста и репозиториями

  • BLL: бизнес-логика системы

    - сущности

    - услуги

    - и т. Д.

  • Пользовательский интерфейс: страницы ASP.NET

Вопросы:

  1. Правильно ли разделение логики?

  2. Стоит ли использовать определенные репозитории?

  3. Какую реализацию шаблона репозитория вы бы порекомендовали для лучшей организации проекта и простоты использования?

  4. Лучше использовать статический репозиторий?

Спасибо

Ответы [ 2 ]

1 голос
/ 13 октября 2011

Не используйте статические классы в качестве хранилища.Это ужасно и далеко от правильного объектно-ориентированного дизайна.Он также полностью блокирует любую возможность инверсии управления и внедрения зависимостей.

Если вы хотите использовать шаблон репозитория, вы должны использовать определенный репозиторий.Универсальный репозиторий - это просто оболочка вокруг классов, связанных с EF (где ObjectSet / DbSet уже является EF-зависимым репозиторием).Вы также должны построить свой репозиторий поверх совокупных корней, а не над всеми сущностями.

0 голосов
/ 13 октября 2011

Моя предпочтительная настройка:

  • Project.Presentation (UI)
  • Project.Application (прикладной уровень, который предоставляет DTO для потребителя / пользовательского интерфейса и выполняет команды на уровне домена)
  • Project.Domain
    • Объекты [с доменной логикой] (Заказ, Клиент, ...)
    • Доменные службы (TransferService, CreditCardService ...)
    • Интерфейсы репозитория (IOrderRepository, ICustomerRepository, ...)
  • Project.Repositories.EF (Доступ к данным с использованием специальной технологии, реализующей интерфейсы репозитория (OrderRepository, CustomerRepository)
  • Project.Infrastructure (сквозная резка)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...