Ric*_*ald 3 service inheritance domain-driven-design
我有一个Order带有相应OrderService和的聚合根OrderRepository。
我有一个ExtendedOrder对应的ExtendedOrderServiceand ExtendedOrderRepository。
例如:
class Order {
int GetOrderId();
}
class ExtendedOrder : Order {
string GetExtendedInfo();
}
Run Code Online (Sandbox Code Playgroud)
我想有OrderService返回类型都是Order和ExtendedOrder作为一个列表Order。但要获得ExtendedOrder它应该要求相应的ExtendedOrderService当Order是类型ExtendedOrder。
是否有可能获得这种行为?让一个聚合根扩展另一个聚合根是否合法?
主要问题是,你需要它做什么。我怀疑它与某种用户界面或报告功能有关。如果是这种情况,我的建议是不要对这些查询使用域模型概念。
换句话说,将域模型概念与报告相关的查询分开(对于保持一致性和实现对复杂业务逻辑的控制非常有用)(在 UI 上呈现结果毕竟是报告的一种形式)。在某些时候未能进行这种分离总是会导致调整域模型以满足某种 UI 或报告的要求,而这种情况不应该发生。
在您的情况下,我只需准备一个忽略聚合并选择我需要的所有数据的查询。当然,当要对结果执行某些业务操作时,应该使用域模型。毕竟,聚合负责保持一致性,唯一有机会扰乱一致性的是更新数据——读取数据不会导致更改,因此在我看来,使用聚合进行读取是毫无意义的。
综上所述,大多数情况下与报告相关的功能不应导致域模型业务概念的调整。