Использование Entity Framework с шаблоном репозитория в WinForms MDI

Мы собираемся запустить новый проект, аналогичный предыдущему. Я мог бы просто скопировать старый дизайн, но меня не слишком устраивает старый дизайн.

Это «стандартная» бизнес-система (продажи, инвентаризация, складирование и т. Д.), Построенная на основе .Net 3.5 (Winforms MDI) с Entity Framework в бэкэнде.

Все формы наследуются от базовой формы (которая наследует Windows.Form). Форма предоставляет свойство ObjectContext, которое при первом вызове создает экземпляр нового ObjectContext. Я думаю, это составляет довольно хороший UnitOfWork, поскольку весь доступ к данным изолирован в каждой форме.

Тем не мение.

Я инкапсулировал все запросы и общие CRUD в "репозитории бедняков". Эти репозитории представлены как свойства ObjectContext.

Поэтому, если бы я хотел привязать и упорядочить форму, я бы вызвал OrderLinesGrid = ObjectContext.OrderRepository.GetOrderLinesByID (orderID).

OrderRepository получает ссылку на объектный контекст, созданный для формы, например

(В моем частичном классе ObjectContext)

Private _OrderRepository as OrderRepository
Public ReadOnly Property OrderRepository as OrderRepository
Get
if _orderrepository is nothing then
_orderrepository = New OrderRepository(me)
end if
return _orderrepository
End Get
End Property

Что мне не нравится в этом, так это:

  1. Вызов репозитория осуществляется через ObjectContext. Следовательно, я не получаю абстракции между запросом и уровнем данных, который мне нужен.

  2. Для каждого нового типа в моем домене мне нужно создать свойство в моем ObjectContext

Мой вызов OrderRepository должен просто возвращать объекты домена и не беспокоиться о том, как они сохраняются. Кроме того, у меня не может быть, чтобы каждый репозиторий имел собственный ObjectContext, поскольку для этого мне потребовалось бы прикреплять и отсоединять объекты при ссылке, например, Country на свойство Order.Country.

Буду признателен за любые идеи и отзывы по этому дизайну :)


person ViktorBergman    schedule 20.02.2010    source источник


Ответы (1)


Предлагаю вам изучить принцип лука, шаблон репозитория и шаблон Luw. В сети есть много примеров.

По сути, вы используете основной проект модели POCO. Никаких ссылок на проект DAL. Вы объявляете интерфейсы для шаблонов Repository и luw в проекте CORE.

Итак, теперь

UI layer -> instantiate context and DAL Object eg repository -> inject into CORE services.

С этим подходом также связана инверсия управления или шаблон внедрения зависимостей.

Если вы используете разработку через тестирование для фиктивных репозиториев, вы можете убедиться, что соблюдаются принципы проектирования.

person phil soady    schedule 10.05.2013