C# “限定上下文”;“一体化”;
我们试图找出一个场景的分离有界上下文集成 假设一个上下文是文档核心限定上下文(BC),并且有一个文档实体和作者。在中使用IdentityAccessContextBC,将用户、组和角色分离到各自的上下文中是有意义的 出现的问题是在考虑获取一个包含100多个文档的列表时 假设文档核心BC有自己的实体来标记文档的作者C# “限定上下文”;“一体化”;,c#,asp.net-mvc,domain-driven-design,bounded-contexts,C#,Asp.net Mvc,Domain Driven Design,Bounded Contexts,我们试图找出一个场景的分离有界上下文集成 假设一个上下文是文档核心限定上下文(BC),并且有一个文档实体和作者。在中使用IdentityAccessContextBC,将用户、组和角色分离到各自的上下文中是有意义的 出现的问题是在考虑获取一个包含100多个文档的列表时 假设文档核心BC有自己的实体来标记文档的作者 public class Author { long Id; // Same as UserId long Document; } 然后身份BC有一个具有相关信息
public class Author
{
long Id; // Same as UserId
long Document;
}
然后身份BC有一个具有相关信息的用户
public class User
{
long Id;
string FullName;
}
获取文档列表时,如何将IdentityAccessBC中的信息检索到文档作者中或与文档作者一起显示(例如全名)
似乎有两种选择:
但是,在查看BC集成时,考虑到本书中提到的3个选项RPC、域事件和RESTful服务集成,在应用程序为MVC的情况下,至少后2个选项没有意义,它直接使用2个BC作为类库,并且它们都使用相同的数据库。可以通过IdentityBC的应用程序服务直接从MVC更新用户信息。数据库和BC可以根据需要进行更改。您可能不需要集成这些有界上下文,而需要组合它们。请参阅《实施DDD手册》中“应用”一章下的相关章节 一种方法是创建一个应用程序服务,该服务访问两个有界上下文,并创建一个文档DTO,其中包含来自两个BC的信息
您甚至可以更进一步,为其创建第三个有界上下文,并使用众所周知的BC集成技术来保持新BC的同步(消息传递、夜间批处理等)。正如沃恩·弗农(Vaughn Vernon)在他的书中指出的那样,这可能会导致新不列颠哥伦比亚省的贫血领域模型。您可能会感兴趣的一些解决方案: A.在文档绑定上下文中使用冗余属性。像
public class Author {
long Id; // Same as UserId
string fullname://redundant
long Document;
}
但是这种方法并不灵活,如果查询需求发生变化,模型就必须改变
域模型不擅长查询,如果您熟悉CQRS,更好的解决方案是构建一个单独的查询组件