我会说你们都错过了这条船,同时在正确的轨道上......让我解释一下。
作为一个行业,DDD 是我们将业务问题的现实编码为我们可以映射到计算机程序的解决方案域的最佳方式。 DDD 是一种将真实领域抽象为对我们更易于管理和相关的方法,这些都是好东西。
您面临的问题是在实现中,过去 20-30 年流行的实现选择是面向对象 (OO),在 OO 中传递对象的核心机制是通过传递对同一对象的引用像你自己一样的记忆空间。因此,您在大型对象图方面面临的问题从来都不是真正的问题。
进入服务导向 (SO) 翻转事物,您不再传递对对象的引用,而是在服务之间交换消息。消息的大小现在成为一个问题。
如果我们接受实施范式已经改变,我们需要接受我们的一些 OO 最佳实践/模式不再适用或需要修订。
如果你想进入 SO 的思维方式,我相信(我的观点)你需要稍微放弃富域的想法。我将这个新概念称为面向服务的域(SO-Domain)。
在 SO-Domain 中,域的状态和域的行为分为您传递的消息和您使用的服务。
所以教师的状态或属性是教师DTO的一部分,但行为是教师服务的一部分。
在 OO 术语中,这是一个贫乏的领域,但从某种意义上说,这并不是一件坏事,因为这给了您一些惊人的灵活性,因为您不再拥有一件大事,状态可以在多种情况下使用。
您仍然有一个有效的域,它只是进行了差异分区,消息保持状态,服务保持行为。
剩下的就归结为服务接口设计了,因此要为教师获取课程,您可以使用 List RetrieveTeacherClasses(teacherIdentifier) 之类的东西。添加学生 AddStudentToClass(Student, classId)。
有一百万种不同的方法可以做到这一点,您会找到适合您的方法,但作为一般规则,您应该遵循状态感知范式,这意味着消息将发送服务需要了解的任何状态关闭,这使得服务是无状态的,无状态服务意味着可扩展性。
Pratik 提到了性能,系统范围内的真正性能提升不是通过关注对象图的大小来实现的,而是解决方案中每个服务独立扩展的能力。
这里有一些关于这些想法的更多链接
Building a SOA
SOA Design Pattern
Achieving integrity in a SOA
Why your SOA should be like a VW Beetle
SOA explained for your boss
WCF Service Performance