前言说明:
- 无论使用什么业务,业务的总体复杂性不会降低,一个模块的简化势必增加其他模块的复杂性
目录:
- 问题
- 业务分析发展阶段
- 模型特性
- 模型的注意事项
- 如何建模
- 问题解答
内容:
1,问题:
- 建模目的、作用
- 业务模型和技术模型不一致
- 模型经常被推翻
- 模型可扩展性考虑不足
- 领域建模是基于业务模型,对业务的不熟悉是主要障碍,缺少统一的领域语言导致团队理解不一致,沟通效率低
2,分析设计发展的三个阶段
- 基于数据库:缺点:不了解需求本身导致需求分析不全面,频繁返工
- 面向对象的方式:缺点:从产品角度出发,由产品经理规划对象,由于产品只关注实现功能,对于各个对象之间的关系并不关注,导致技术实现频繁修改
- 面向模型:使用一种分析设计统一语言将业务、产品、技术等各方达成统一,通过业务的本质就可以把业务的变化点挖掘出来、且有有利于思想达成共识
3,模型特性:
- 建模本质是为了将各方的观点使用统一的一种语言(建模语言,比如UML)达成一致,他是捕获事物本质的感觉能力和洞察能力,这样就可以体现未来变化点
- 模型表达的是什么?是战略方向,而不是怎么做,怎么去做那就是技术模型了
- 模型都是有前提和范围的,例如一个砖头,他有很多的属性,在不同领域突出不同的属性而已,所以模型本身并没有对错,只是对应不同的场景而已
- 领域只是表达需求真实世界业务模型,和软件架构无关,所以绘制模型的时候不要把技术放进去
4,模型注意事项:
- 领域模型一般是由领域专家来定义的,但是很多公司都是没有这个角色的,因此在接需求的时候就需要产品、技术使用领域建模的方式来达成一致(主要是技术一般很少接触到业务方)。如果在有领域专家的情况下,就变成领域专家、业务方、产品、技术一起来确定模型了
- 建模前期应该先出总体流程,负责的领域与外部系统的交互设计出来,具体负责领域的内部应该是自己的关心的;
- 面向领域模型设计最常见的表现形式就是UML(注意UML只是一个模型图统称哟),例如:UML状态图可以表达模型的生命周期,可以确定最典型的场景;对象图可以反映各个模型的关系;
对于软件来说,我们常用UML图有:用例图,状态图。 - 建立模型时我们可以通过模型反推业务,根据不同的情况反推模型的可靠性和业务的合理性
5,如何建模:
场景:
业务方:我想建一个四合院,每间房子使用装修不一样,用途也不一样,有的可能是我们自己住,也有可能是租出去或者卖掉;四合院中心可以住花种草,但是具体功能还没有想好。呐,大致的内容就这些,好啦,你们有什么问题吗?没问题就开始建房子吧!
看到我们以上场景,领域专家可以抽几个关键词”四合院“,“用途不一致”,”中心功能可变化“,但是这些内容对于建造一个房子是远远不够的,我们需要向客户获取一些必须的信息
”中心部分种的花、草每个房间是否也可以装饰呢?“,”可以“;
”每个房间的配置都有哪些不同,是否有相同的部分?“,”比如说房间一二都有独立卫生间,三四房间使用的是公共卫生间。他们有共同的部分,比如说都有床“
”如果是出租的房子“,”是否收费规则是一样的,比如说都是季付或月付“,”一样的“
好了,聊到这里,总结一下刚刚上面的信息,我们可以很容易的看出:一个房子下面有很多的房间、一个房子下面会有不同的附属设施(中心部位、卫生间等)、房间也有附属设施(卫生间),附属设施用途可发生变化,比如说中心部分换成了溜冰台或新增自动洒水设置,但是这些最终都是以一个设施的形式存在,所以我们根据以上内容就得到了这样一个模型图
这样一个简单的模型图就就建好了;
6,问题解答
- 建模目的、作用
答:使用一种分析设计统一语言将业务、产品、技术等各方达成统一,通过业务的本质就可以把业务的变化点挖掘出来、且有有利于思想达成共识
- 业务模型和技术模型不一致
答:由于领域模型图天生就是基于业务,产品直接根据该模型做产品设计即可;技术也可以做技术设计,由于模型是统一的,那么最终的技术和产品的偏差一般不是很大(偏差不可避免的) - 技术方案经常被推翻
领域建模天生基于业务本质所抽取的模型,模型只要定了,基本技术方案不会有太大变化,除非业务发生变化,这个没有办法解
- 模型可扩展性考虑不足
从五示例中的模型图,我们很明显可以之后的扩展点是附属项,产品、技术只需要提前预留好接口接口,这也就是领域建模的好处之一,预先就知道业务部分的变化点。
- 领域建模是基于业务模型,对业务的不熟悉是主要障碍,缺少统一的领域语言导致团队理解不一致,沟通效率低
领域模型就是使用一种分析设计统一语言将业务、产品、技术等各方达成统一的一种模型语言,一般是由领域专家来定义的,但是很多公司都是没有这个角色的,因此在接需求的时候就需要产品、技术使用领域建模的方式来达成一致(主要是技术一般很少接触到业务方)。如果在有领域专家的情况下,就变成领域专家、业务方、产品、技术一起来确定模型了