请参阅: 说明
| 接口 | 说明 |
|---|---|
| IVirtualModel |
逆向建模时识别出的当前代码里并不存在的业务对象.
|
| 枚举 | 说明 |
|---|---|
| KeyElement.Type |
业务属性的分类.
|
| KeyRelation.Type |
业务对象间关系的分类.
|
| 注释类型 | 说明 |
|---|---|
| Aggregate |
聚合/问题域,非DDD项目可以理解为模块.
|
| KeyBehavior |
业务对象的关键行为,只隶属于当前对象.
|
| KeyElement |
业务对象的核心属性:业务方可感知的最小完备集.
|
| KeyEvent |
关键领域事件,单向传递.
|
| KeyFlow |
关键业务逻辑流程,也可以理解为
KeyService的某个方法. |
| KeyRelation |
业务对象间关系.
|
| KeyRelations | 已过时
不要直接使用.
|
| KeyRule |
关键的业务规则,控制逻辑.
|
| KeyUsecase | 已过时
Please use
KeyFlow.usecase() |
背景:好的业务模型不仅对产品架构、开发有重大意义,也能够快速的帮助客户分析管理上的不足、业务处理上的漏洞、不合理需求的悖论等.
目标:提供一套模型描述语言,从代码提炼精粹的业务知识,指导并约束模型和系统演进.
路径:明确业务中关键问题,跨越(架构约束,技术限制)等造成代码难以直观表达模型的问题,面向对象地抽取和修正,形成与正向模型正反馈闭环.
价值:通过逆向工程方法揭示代码实现里体现的核心领域问题,发现essential problems:一方面关联代码实现,一方面关联通用语言.
《架构整洁之道》中的定义:软件架构是指设计软件的人为软件赋予的形状。
DSL标注过程,是无技术约束的OO二次设计的过程,是re-shape your code过程,是architecture discovery过程.
DSL标注过程,是Declarative Programming,而非Imperative Programming,关注描述问题和规则,而非实现步骤.
DSL标注过程,是对当前代码进行声明式编程的二次创作过程,它描述的问题的空间结构,结合版本控制就体现了时间维度.
DSL标注过程,是把领域知识注入代码的过程.
由于代码具有(可运行,包含完全细节,演进过程完整追溯,自我修复)特征,因此成为业务的唯一事实真相;但代码里有太多技术细节产生的业务模型噪音,导致代码里无法直观看到业务真相.
建模 = 图形 + 逻辑 + 现实的抽象,代码(一维的,局部的),而模型(多维立体的,全局的),逆向模型相当于动态的活地图
通过该DSL建立的逆向模型,(业务强相关,代码强相关),它完成了业务与代码双向映射,最终实现(业务模型,代码实现)的持续一致.
Although much of the attention in business engineering is about process, most of these patterns are static type models. I like to think of type models as defining the language of the business. These models thus provide a way of coming up with useful concepts that underlie a great deal of the process modeling. 在面向对象开发过程中很重要的原则:要设计软件,使得软件的结构反映问题的结构。
DomainModel --> CodeImplementation
^ |
| V
KnowledgeCrunch <-- ReversedDomainModel
KeyElement.name(),KeyBehavior.name()等,修正关键概念名称KeyFlow.actor(),重新分配行为职责IVirtualModel,识别代码里缺失的关键职责对象,并在模型层建立从模型中来,到模型中去闭环ArchiMate/BPMN/C4 Model/UML/TOGAF ADM/SysML/4+1 View Model等架构模型语言相比,本DSL:
DDDplus is not going to re-invent the wheelIDEA Sequence Diagram plugin/BPMN等工具已经具备这类能力CallGraphReport会绘制关键方法的调用关系ISpecification已经可以自动追溯了,因此没必要在逆向模型里体现,否则只会产生不必要噪音DomainArtifactsReverseEngineeringModel,which can be defined with multiple RDBMS tablesCopyright © 2020–2023. All rights reserved.