领域驱动设计
随着计算机的普及,软件的发展也从一开始的单一计算,变为大规模,多功能的集合.这也就对软件开发的效率,规模,可维护性提出了更多的要求,针对于软件不同的发展阶段,它的开发模式也是一个逐渐演变的过程:
瀑布开发模式 -> 敏捷开发模式 -> 领域驱动设计 -> 微服务 -> ...
**瀑布开发模式**:强调软件规范,使用工程管理思想来管理软件.通过严格的流程分工:需求分析->设计->开发->测试->运维.职能的明确可以提高节点内部的执行效率,针对小项目,这种方式从需求到运维,可以发挥很好的作用,部门之间协调周期也是可控的.但是对于复杂项目,由于软件并不像工程那样固定明确,设计无法面面俱到,很多设计到了开发阶段才能发现,返工现象变多,问题的反馈周期会变长,再加上市场等外部环境的变化,软件失败的风险也会更大.
**敏捷开发模式**:敏捷开发模式的出现就是为了解决设计固化的问题,它讲究以源代码为设计文档,通过声明性约束来保证代码的规范性,上来就是,什么都不说就是干.然后通过不断重构,获取一个整体设计.这种开发模式打破了设计和开发的界限,将开发视为软件的核心,它很适合需求变化快,迭代快的行业,比如互联网.
**领域驱动设计**:因为敏捷开发模式这种以点带面的特点,使得很难形成一个整体设计,因为大家都专注于自己的模块,整体性就很差.通过将领域专家和开发人员结合,共同协商出一个统一模型,然后再细化开发,然后通过约束和重构,不断深化模型,实现设计和开发的统一,就是领域驱动设计的内容,它的核心是领域模型,领域即你的问题域,也就是软件要解决问题的范围.模型就是你现实问题的抽象,就像你说地球感觉很陌生,但是说地球仪,就能从整体上把握地球的特点.当然任何事物都有两面性,领域驱动设计从提出到现在,并没有太多的实践示例,因为它的逼格有点高.首先领域专家就很难找,其次领域模型很难获取,不同行业模型不同,像电信等复杂的领域,模型获取更加困难.
**微服务**:小而自制的服务模型.它也是解决软件的复杂性问题方案.核心就是将软件根据领域进行拆分,一般复杂都是因为规模大,行业信息量大,规则交错,但是你将软件根据领域进行拆分为多个服务,将规模变小,它的信息量和规则的复杂度也会下降,通过不断的分化,拆解自己问题域,实现问题的简化.同时通过服务调用,组合的方式,实现原来的单体应用功能.任何设计都不是一蹴而成的,了解背后的发展阶段,可以更好的理解它的理念.
*领域驱动设计*:
核心理论包括两方面:通用语言和领域模型管理.
其中领域模型管理又包括:模型驱动设计,上下文边界,核心领域
领域驱动设计
参考资料:
超越DDD的创新思想:开发即设计思想 https://www.jianshu.com/p/c81ae702ee21
领域驱动设计到底难在哪? https://www.jianshu.com/p/ab80cb9f307c?from=groupmessage