DDD提倡充血模型,业务放在类中,而不是服务中,刚开始是比较不清楚的。
突然明白,以前开发桌面程序的时候,不就是这样处理了吗?业务分析和代码实现一一对应。因为桌面程序没有数据库,他就是纯粹的面向对象的实现:类有属性,方法,这些又有有私有,公开之分。
但是基于CURD的Web程序可不是这样了。首先web程序是无状态的,另外它的大部分动作都是读写数据库。这样,都被零零碎碎的session,数据库之类的搞散了,哪里有面向对象的意思呢?
我们进一步封装,把那些数据库之类的暂时不考虑,我们的代码直接反映业务。大概这就是框架力量所在
DDD是设计思想,初学面向对象的人,理解DDD就像,刚开始学面向对象的人一样,存在疑惑,并且疑惑更大。
这主要是没有经历过软件思维训练。
他们可能会想:我原来的写法挺好的啊,为什么会出来这么一种设计思想呢?
那是他们还没遇到业务复杂的情况,或者没有思考过这么改进。
熟练运用面向对象设计之后,在遇到业务分析,自然的会用面向对象的思路架构。DDD也是这样。
值对象,就是一个值。在C#的类中,一个string 属性,就是值对象。而一个地址,里面包含了省市县字段(无Id),相当于只是一个复杂的属性,也是值对象。
DDD是分析业务的方法。就像用面向对象的思想去做项目,和面向过程做项目,最大的差别是视角不同,而不是采用的具体技术。
C语言也可以用面向对象写代码。不会面向对象的人,用C#也写不出来面向对象的程序。