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