当前位置:网站首页>领域驱动设计——MDD
领域驱动设计——MDD
2022-08-05 01:44:00 【fpcc】
一、MDD
在领域驱动设计中,最重要的就是Model Driven Development,模型驱动开发(MDD)。在编程领域有一句名言“依赖于抽象而不是依赖于具体”。这既是设计的一个原则,更是一个MDD中的过程。模型就是从具体的业务中通过思想抽象出来的。
在早期的软件开发中,一般是有着比较明确和具体的要求,行业也相对固定。这样的软件,对设计要求并不高或者说设计在其中无法起到重要的作用。正如人们的一句俗话“杀鸡焉用宰牛刀”。但这并不代表设计不重要,随着软件业务的复杂性和规模性不断成长,软件设计的重要性愈发体现出来。
而这个过程中,固定模式和相对容易与实际业务剥离的工作更利于快速引入设计,而实际情况亦也是如此。但复杂的业务和与业务有着千丝万缕的关系的部分则很难抽象设计。可是,很难不代表不可以,领域设计就是解决这种实际场景的方式,而能不能把实际精力进行高度抽象形成模型,由其来驱动进行整个型业务逻辑的开发。而一个好的模型,不但可以有更好的业务弹性和扩展性,还可以借助通用语言在不同的应用人员中间进行共同完善,并最终指导软件编码实现业务功能。
这里的一个关键点在于,以前的模型设计,模型是模型,程序设计是设计,二者基本是分割开来的,但是在MDD中,这二者的界限被模糊了,或者说将二者要有机的统一起来。这才是重点,一个模型,同步使用。
提到MDD,就不得不提到MDA,MDA,Model Driven Architecture,模型驱动架构,它是由国际对象管理组织(OMG,Object Management Group)于2001年7月提出的基于MDD形式化后的模型驱动架构。所谓驱动架构,其实就是把模型和技术分离,实现轻便可移植性、互操作性和可重用性。由于业务的代码的解耦,可以更好的适应两个层次上的扩展和自适应性。技术的迭代发展和业务的变化互无影响。
MDD的描述可以采用大家熟悉的一些建模标准(UML、MOF、XMI等)来达到可读性。
有了MDD,就会有MDF,也就是MDD Framework,模型驱动开发框架,毕竟从头搞一些东西,不断的重复造一些轮子意义不大。同时还能占领市场,高调赚钱,一举多得,搞搞框架那是最好不过的了。对MDF框架这里不做什么描述,重点还是说明MDD。
二、MDD的核心
MDD的核心是什么?一定要在可控范围内严格保证模型与设计之间的一致性。在前面提到过,MDD是要保证模型的可适应性,不能像纯模型设计一样,在实际开发阶段,模型基本就没有了作用。MDD要始终保持整个模型在程序设计开发周期的可用性。那在此基础上使用一些开发工具和辅助手段是必要的。比如对一些范式的要求和工具的匹配度。
只要设计好一个实用的模型,软件开发其实就一个不断精化模型、设计和代码的统一 的迭代过程。
三 、MDD驱动流程
首先要明白MDD的一些专业术语:领域、限界上下文、关联、实体、值对象、领域服务等。这些会在后面详细解释,这里重点讲驱动流程:
1、由实际业务场景得出初步的领域和限界上下文(module),以及上下文之间的关系;
2、分析上下文,划分实体和值对象;
3、关联聚合实体、值对象,从而得到聚合的范畴和聚合根;
4、从聚合根设计仓储(资源库),同时设计如何创建实体和值对象;
5、应用模型并在实践中不断重构模型。
四、总结
学习任何一种知识,一定要抓住主干,提纲挈领。以无隙入有间。领域设计,首先要搞好MDD,抽象模型的能力就是你领域设计的能力。而想有好的抽象模型的能力,除了对业务本身的领域划分(也就是边界)敏感,有着良好的领域思想理念,熟稔于模型的创建手段和方式,对技术应用有着深度的把握。才能够创建出一个优秀的领域模型。
多学习,多应用,多思考,提高思想水平。
边栏推荐
- XMjs跨域问题解决
- 动态规划/背包问题总结/小结——01背包、完全背包
- 4. PCIe 接口时序
- C# const readonly static 关键字区别
- Live playback including PPT download | Build Online Deep Learning based on Flink & DeepRec
- Method Overriding and Object Class
- 【Redis】Linux下Redis安装
- Lattice PCIe 学习 1
- 如何创建rpm包
- sqlite--nested exception is org.apache.ibatis.exceptions.PersistenceException:
猜你喜欢
高数_复习_第1章:函数、极限、连续
tcp中的三次握手与四次挥手
开篇-开启全新的.NET现代应用开发体验
新来个技术总监,把DDD落地的那叫一个高级,服气
Use of pytorch: Convolutional Neural Network Module
5. PCIe official example
1349. Maximum number of students taking the exam Status Compression
Dynamic Programming/Knapsack Problem Summary/Summary - 01 Knapsack, Complete Knapsack
Activity Recommendation | Kuaishou StreamLake Brand Launch Conference, witness together on August 10!
Xunrui cms website cannot be displayed normally after relocation and server change
随机推荐
Opencv - video frame skipping processing
Lattice PCIe Learning 1
sqlite--nested exception is org.apache.ibatis.exceptions.PersistenceException:
ExcelPatternTool: Excel表格-数据库互导工具
2022杭电多校第一场
【Redis】Linux下Redis安装
10年测试经验,在35岁的生理年龄面前,一文不值
2021年11月网络规划设计师上午题知识点(下)
缺陷检测(图像处理部分)
超越YOLO5-Face | YOLO-FaceV2正式开源Trick+学术点拉满
高数_复习_第1章:函数、极限、连续
原生js实现多选框全部选中和取消效果
Object.defineProperty实时监听数据变化并更新页面
Knowledge Points for Network Planning Designers' Morning Questions in November 2021 (Part 1)
tcp中的三次握手与四次挥手
Exercise: Selecting a Structure (1)
AI+PROTAC|dx/tx完成500万美元种子轮融资
4. PCIe 接口时序
IJCAI2022 | DictBert:采用对比学习的字典描述知识增强的预训练语言模型
Three handshake and four wave in tcp