Мы пишем приложение для обслуживания данных MVC, которое является частью более крупного проекта. Мы пытаемся использовать доменно-ориентированный дизайн DDD. На SO уже есть другие вопросы по этому поводу, например здесь, здесь и здесь. Но они не полностью отвечают на мой вопрос.
У нас также есть ограниченные контексты на уровне данных, поскольку в базе данных 755 таблиц. Поэтому мы создали ограниченные контексты для бизнеса, ролей, продуктов, клиентов и т. д.
Проблема заключается в том, что в приложении MVC у нас есть представление для «начальной настройки», в котором используется модель представления, которая в конечном итоге охватывает несколько ограниченных контекстов (с использованием шаблона IUnitOfWork в Entity Framework 6). Следовательно, это представление должно писать в бизнес-контекст и в контекст ролей.
Модель предметной области будет иметь модель Business
и модель Address
, а также несколько других моделей в более крупном графе объектов.
ViewModel — это плоская упрощенная модель этих двух и других моделей предметной области:
public class InitialSetupViewModel
{
string BusinessName{get;set;}
string Street{get;set;}
string Street2{get;set;}
string State{get;set;}
string ZIP{get;set;}
...
}
Эта ViewModel должна сопоставляться с моделями предметной области, что мы и делаем с помощью Automapper.
controller внедряет службу домена:
public class SetupController : Controller
{
private readonly IMaintenanceService service;
public SetupController( IMaintenanceService maintenanceService = null )
{
service = maintenanceService;
}
public void Create(...????....)
{
service.CreateBusiness(..?.);
}
}
Проблемы:
Служба не может знать о
InitialSetupViewModel
, так что же нужно передать службе?Служба должна знать о
BusinessDbContext
иRolesDbContext
. Поэтому я должен вызвать SaveChanges() для обоих, что превосходит цель иметь один IUnitOfWork. Нужно ли мне создавать еще одну UnitOfWork, включающую как бизнес-объекты, так и ролевые объекты?
Я не думаю, что оправданно объединять эти два IUnitOfWorks в один только для того, чтобы это представление MVC работало. Но каково решение?
Спасибо!
Create
на контроллере примет вашу модель представления, которую вы затем преобразуете в DTO и передадите ее своей службе. - person Vsevolod Goloviznin   schedule 02.12.2014