我们正在编写一个 MVC 数据维护应用程序是一个更大项目的一部分。我们尝试使用领域驱动设计 DDD。在 SO 上已经有其他关于此的问题,例如这里、这里和这里。然而他们并没有完全回答我的问题。
由于数据库有 755 个表,因此我们在数据层中也有有界上下文。因此,我们为业务、角色、产品、客户等创建了有界上下文。
我们遇到的问题是,在 MVC 应用程序中,我们有一个“初始设置”视图,它使用最终跨越多个有界上下文的 ViewModel(在 Entity Framework 6 中使用 IUnitOfWork 模式)。因此,该视图必须写入业务上下文和角色上下文。
域模型将在一个更大的 pbject 图中有一个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执行的域模型。
控制器获取注入的域服务:
public class SetupController : Controller
{
private readonly IMaintenanceService service;
public SetupController( IMaintenanceService maintenanceService = null )
{
service = maintenanceService;
}
public void Create(...????....)
{
service.CreateBusiness(..?.);
}
}
问题:
服务无法知道
InitialSetupViewModel
,那么应该将什么传递给服务?服务必须知道
BusinessDbContext
andRolesDbContext
。所以我必须在两者上调用 SaveChanges(),这超出了拥有单个 IUnitOfWork 的目的。我是否必须创建另一个包含业务和角色实体的 UnitOfWork?
我认为将这两个 IUnitOfWorks 合并为一个只是为了使这个 MVC 视图工作是不合理的。但是解决方案是什么?
谢谢!