一:是什么
领域驱动设计(domain driver design)是一种设计思路,而不是具体的实操过程。领域驱动设计解决的是复杂问题。
它可以从几个维度来理解:
1.空间:看的是整个行业或领域
2.时间:软件从发生,发展到消亡的过程。
3.角色:业务,产品,开发,运维等全部参与人员的合作。
有什么特点
领域驱动设计的务实主要体现在2个方面:
1.注重投资回报比
2.做长期优化
注重投资回报比
所谓注重投资回报比的意思就是DDD设计本身是一个很耗时耗力的过程,需要从多角度考虑问题,投入了大量的人力物力,就要能获得相应的回报,不然得不偿失,即要注重回报比。
适合使用领域驱动设计的系统需要具备这些特点:
1.系统组件多
2.业务逻辑足够复杂
3.软件生命周期足够长
做长期优化
软件的项目周期有时候比个人的项目周期还长,等软件真正出现问题的时候,维护人员也许已经换了,就有可能出现经验知识的传承问题。领域驱动设计尝试解决这些长期沟通问题,降低整个软件生命周期中的沟通成本,这样就能降低项目失败的可能性。
怎么做
人员组织架构
一般在解决问题的时候是先解决人再做事,那么应该先确定人员组织架构,再考虑如何设计系统架构。一般软件开发过程中涉及的人员有:业务方,产品经理,架构师,开发人员。
为了降低沟通成本,减少信息丢失,人员架构最好由传统的垂直结构变成小组结构。小组人员之间要相互理解对方的相关专业术语。
系统组织架构
一个复杂的软件系统也不是所有地方都复杂,各个组件的复杂度和重要程度都不一样。所以我们可以像庖丁解牛一样,对系统组件进行分解,然后把相同的归类,统一对待。
领域驱动设计将所有业务领域划分为三大类型:**核心领域、通用领域以及支持型领域**
核心领域:
一个软件是否重要,取决于它所属的业务是不是核心业务,而业务是不是核心又取决于竞争对手,能比竞争对手有优势,能给公司带来行业内的竞争优势。而优势可以是不同方面的,需要审时度势,结合当下时代背景和宏观视角去分析,能赚钱,规避风险的基本能算核心领域。比如证券公司的交易系统,支付公司的支付系统等。
通用领域
顾名思义,通用领域是可以在不同行业通用的领域。比如我们前面提到的短信平台,不只是金融公司可以使用,物流公司也可以使用。类似的还有安全、日志、存储等等。所以当市场上存在多个类似的产品的话,我们要尽量采购相关服务或者产品,而不是自己研发。
支持型领域
支撑型领域是那些用来辅助核心领域正常运行的领域。支持型领域并非核心竞争力,但是缺了之后也无法正常开展业务。比如说会计系统、市场数据系统等等,一般属于支持型领域。处理思路就是,能买就买,没有合适的就看人工能否处理,人工能处理的就人工处理,实在不行就投入少部分的人力资源研发,也不需要研发质量多高,能用就行。
思维导图:
在这里插入图片描述