Open opencodesp opened 4 years ago
如果经验丰富的领域专家都不能理解模型,那么模型一定是有问题的。
这个项目建立了领域模型,但是如果它不能够直接指导正在进行的软件开发,那么这种纸上谈兵的模型又有什么意义呢?
不再将分析模型和程序设计分离开,而是模型驱动程序设计。这种绑定不能因为技术考虑而虚弱模型分析的功能,也不能接受那些只反映了领域概念却舍弃了软件设计原则的拙劣设计。
我们需要将领域与系统中的其他功能分离,这样能够避免将领域概念和其他只与软件技术相关的概念相混淆,也不会把领域与整个软件系统混为一谈。
当对软件必须实现的某项无状态的活动进行建模时,就可以将活动作为一项SERVICE
。
很多对象不是通过他们的属性定义的,而是一连串的连续事件和标识定义的,这些对象称为ENTITY
。
很多对象没有概念上的标识,它们描述了一个事务的某种特征。这些对象称为VALUE OBJECT
。
如果一个VALUE
的实现是可变的,那么就不能共享它。无论是否共享VALUE OBJECT
,在可能的情况下都要将它们设计为不可变的。
当设计中,将一个VALUE OBJECT
指定为不可变时,开发人员就可以根据技术需求来决定是复制,还是共享实例,因为他们没有后顾之忧。
有时,对象不是一个事物。最清楚、最实用的设计会包含一些特殊的操作,这些操作从概念上讲不属于任何对象。这些不适合被建模为对象的领域概念成为SERVICE
。
模型是一种简化。它是对现实的理解,并把与解决问题密切相关的方面抽象出来,而忽略无关细节。