Каков наилучший шаблон для использования объекта контекста сущности в 3-уровневом приложении веб-формы asp.net? - PullRequest
0 голосов
/ 06 августа 2011

У меня есть одно решение, которое содержит 3 проекта:

  1. AutoDataAccess - содержит модель данных объекта
  2. AutoBusinessLogic - содержит бизнес-логику и использует AutoDataAccess
  3. AutoPresentation -содержит приложение веб-формы ASP.NET

Теперь я хочу знать, каков наилучший шаблон для создания контекста объекта сущности в слое BusinessLogic, например, статического объекта, локального объекта и т. д. Спасибо за ваше терпение.

Ответы [ 2 ]

0 голосов
/ 06 августа 2011

Скажем, вы хотите получить доступ к объекту User по адресу электронной почты в качестве примера. Один из способов сделать это будет следующим:

  1. В вашем проекте AutoBusinessLogic имеется IUserRepository интерфейс с методом FindByEmailAddress(string email).

  2. Имейте объект UserRepository, который реализует IUserRepository в вашем AutoDataAccess проекте.

  3. Попросите ваше веб-приложение внедрить экземпляр UserRepository на вашу страницу за интерфейсом IUserRepository. Есть примеры того, как это сделать здесь .

  4. Когда ваша страница веб-формы вызывает IUserRepository.FindUserByEmail, это переходит в UserRepository. Затем UserRepository нужен объект Entities, с помощью которого можно найти User.

  5. Чтобы получить доступ к объекту Entities, ваш UserRepository должен иметь объект, внедренный в него, который создает Entities объектов на основе одного запроса. Давайте назовем интерфейс для этого объекта IPerRequestEntitiesFactory, который вы можете реализовать с помощью HttpContextPerRequestEntitiesFactory, который создает и сохраняет Entities объекты в коллекции HttpContext.Items. На фабрике будет использоваться метод GetEntities(), который создаст объект Entities и сохранит его в HttpContext.Items, если он еще не существует.

Существуют и другие проблемы (ваш Entities объект должен быть удален в конце запроса), но это разумная структура для начала работы.

0 голосов
/ 06 августа 2011

BusinessLogic вообще не должен знать о контексте объекта!Создание экземпляра контекста объекта должно быть обработано классами в AutoDataAccess.Лучше всего, если Вы сможете изолировать бизнес-логику от технологии доступа к базе данных.Это называется постоянным невежеством (PI).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...