Мы собираемся запустить новый проект, похожий на предыдущий. Я мог бы просто скопировать старый дизайн, но я не слишком доволен старым дизайном.
Это «стандартная» бизнес-система (продажи, инвентаризация, складирование и т. Д.), Построенная поверх .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
Что мне не нравится в этом:
Сделан вызов в хранилище
через ObjectContext. Следовательно, я делаю
не получить абстракцию между
запрос и dataaccesslayer I
хотел бы.
Для каждого нового типа в моем Домене I
нужно создать недвижимость в моем
ObjectContext
Мой вызов OrderRepository должен просто возвращать доменные объекты и не беспокоиться о том, как он сохраняется. Кроме того, я не могу иметь каждый репозиторий со своим собственным ObjectContext, так как это потребует от меня присоединения и отсоединения объектов при ссылке на i.e Country на свойство Order.Country.
Буду признателен за любые идеи и отзывы об этом дизайне:)