我是Domain Driven Design的新手。目前我有大约5个bean,它们之间有层次结构。严格来说,豆类是DTO。但是我会将它们从域层返回到服务层和控制器。这对我来说一直很好,但是根据Domain Driven Design,Domain层必须返回BO并且服务必须返回控制器将映射到DTO的DTO或BO。我没有看到这一点,因为最后我将服务返回的对象转换为JSON,这只是数据。所以我真的有必要拥有单独的BO和DTO。
请注意,我有一个无状态业务对象,它可以执行特定业务功能的所有操作,并根据需要返回多个DTO。请告知我是否走在正确的道路上。
答案 0 :(得分:0)
对我来说,分开BO和DTO是非常有必要的。
必要吗?不,DDD警察不会来敲你的门。
但分离关注点的原则告诉我们应该区别对待它们。
业务对象是模型的一部分;他们负责确保模型中的数据满足业务不变性。
DTO(或更准确 - 您的陈述)是API的一部分;它们是与语言无关的消息,可以与其他应用程序共享。
这里的一个关键想法是,由于业务对象是模型的一部分,我们希望能够积极地改变它们以满足业务需求。但是,对于我们需要稳定性的API而言,情况并非如此,因此我们不需要在每次优化业务模型时重写客户端代码。
另一个观点是,您的表示应该跨越信任边界,其中您的业务对象用于强制执行它。 Andreas Hallberg对此(slides)
进行了很好的讨论但在这种情况下,我看到有一个没有逻辑的业务对象
这听起来很像你陷入了anemic domain model的陷阱。我建议你再次审查你的材料;如果您担心模型中有太多实体与数据库通信,那么您在某处丢失了该图:域模型根本不与数据库通信。