zoukankan      html  css  js  c++  java
  • 领域驱动设计-1-概述

    领域驱动设计

    随着计算机的普及,软件的发展也从一开始的单一计算,变为大规模,多功能的集合.这也就对软件开发的效率,规模,可维护性提出了更多的要求,针对于软件不同的发展阶段,它的开发模式也是一个逐渐演变的过程:    

    瀑布开发模式 -> 敏捷开发模式 -> 领域驱动设计 -> 微服务 -> ...

    **瀑布开发模式**:强调软件规范,使用工程管理思想来管理软件.通过严格的流程分工:需求分析->设计->开发->测试->运维.职能的明确可以提高节点内部的执行效率,针对小项目,这种方式从需求到运维,可以发挥很好的作用,部门之间协调周期也是可控的.但是对于复杂项目,由于软件并不像工程那样固定明确,设计无法面面俱到,很多设计到了开发阶段才能发现,返工现象变多,问题的反馈周期会变长,再加上市场等外部环境的变化,软件失败的风险也会更大.

    **敏捷开发模式**:敏捷开发模式的出现就是为了解决设计固化的问题,它讲究以源代码为设计文档,通过声明性约束来保证代码的规范性,上来就是,什么都不说就是干.然后通过不断重构,获取一个整体设计.这种开发模式打破了设计和开发的界限,将开发视为软件的核心,它很适合需求变化快,迭代快的行业,比如互联网.

    **领域驱动设计**:因为敏捷开发模式这种以点带面的特点,使得很难形成一个整体设计,因为大家都专注于自己的模块,整体性就很差.通过将领域专家和开发人员结合,共同协商出一个统一模型,然后再细化开发,然后通过约束和重构,不断深化模型,实现设计和开发的统一,就是领域驱动设计的内容,它的核心是领域模型,领域即你的问题域,也就是软件要解决问题的范围.模型就是你现实问题的抽象,就像你说地球感觉很陌生,但是说地球仪,就能从整体上把握地球的特点.当然任何事物都有两面性,领域驱动设计从提出到现在,并没有太多的实践示例,因为它的逼格有点高.首先领域专家就很难找,其次领域模型很难获取,不同行业模型不同,像电信等复杂的领域,模型获取更加困难.

    **微服务**:小而自制的服务模型.它也是解决软件的复杂性问题方案.核心就是将软件根据领域进行拆分,一般复杂都是因为规模大,行业信息量大,规则交错,但是你将软件根据领域进行拆分为多个服务,将规模变小,它的信息量和规则的复杂度也会下降,通过不断的分化,拆解自己问题域,实现问题的简化.同时通过服务调用,组合的方式,实现原来的单体应用功能.任何设计都不是一蹴而成的,了解背后的发展阶段,可以更好的理解它的理念.

    *领域驱动设计*:
        核心理论包括两方面:通用语言和领域模型管理.    
        其中领域模型管理又包括:模型驱动设计,上下文边界,核心领域

    领域驱动设计模型图
    领域驱动设计

     

    参考资料:

      超越DDD的创新思想:开发即设计思想 https://www.jianshu.com/p/c81ae702ee21
      领域驱动设计到底难在哪? https://www.jianshu.com/p/ab80cb9f307c?from=groupmessage

  • 相关阅读:
    Zend Framework 2.1.5 中根据服务器的环境配置调用数据库等的不同配置
    在基于 Eclipse 的 IDE 中安装和使用 Emmet(ZenCoding)
    【翻译】Emmet(Zen Coding)官方文档 之六 自定义 Emmet
    【翻译】Emmet(Zen Coding)官方文档 之二 缩写
    【翻译】Emmet(Zen Coding)官方文档 之七 一览表
    【翻译】Emmet(Zen Coding)官方文档 之三 CSS 缩写
    【翻译】Emmet(Zen Coding)官方文档 之四 动作
    【翻译】Emmet(Zen Coding)官方文档 之一 web 编程的必备工具
    Zend Framework 2 时区设置警告问题的解决
    【翻译】Emmet (Zen Coding) 元素类型
  • 原文地址:https://www.cnblogs.com/chengmuyu/p/10925640.html
Copyright © 2011-2022 走看看