到底什么是DDD(Domain-driven design)?我的理解;domain就是业务,driven围绕着业务产生的行为,design是设计也就我们所说的架构,总结起来:DDD就是围绕着业务进行的架构设计和行为。
长久以来我们都习惯用技术去解决业务问题,不管是设计模式还是代码重构,都是用技术手段解决业务问题,从没有从业务角度去解决业务问题,而Eric的Domain-driven design(DDD),Vaughn Vernon的Implementing DDD(IDDD)等书籍,为广大的程序开发者提供了一种全新的解决问题的思路和架构体系。
1、外驱动&内驱动
自创的名词,不要太多纠结名字,知道意思就行。看下面两个列子,意图是需要更新一个用户的姓名
上面这个简单的例子看起来都差不多,但是当业务发生在一些复杂的业务中,极端一点我有10个入口可以修改用户的姓名,外驱动的方式也许10个地方都有一段setName和setUpdateTime方法,这只是简单的场景当属性有非常多的时候,业务模型数据的一致性(更新name必须要更新updateTime)将不能由业务模型自己保证,一致性的保证都交给了一个个service,逻辑分散和不内聚。相反,内驱动的方式很好的保证了数据一致性的问题,把之前分散的逻辑都内聚到了业务模型之中。内驱的方式能使业务模型产生行为,不再是单纯的数据载体。
2、分层
首先说明一点,单纯的分层确实可以在一定程度上减少代码的复杂度和增加结构的清晰度,但是如果还是贫血模型式的开发,并不能改变项目朝着腐坏的方向发展。<