Использование Entity Framework с шаблоном хранилища в WinForms MDI - PullRequest
5 голосов
/ 20 февраля 2010

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

Это «стандартная» бизнес-система (продажи, инвентаризация, складирование и т. Д.), Построенная поверх .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. Следовательно, я делаю не получить абстракцию между запрос и dataaccesslayer I хотел бы.

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

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

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

1 Ответ

0 голосов
/ 10 мая 2013

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

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

Так что теперь

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

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

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

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