前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >架构视角 - DDD、TDD、MDD领域驱动、测试驱动还是模型驱动?

架构视角 - DDD、TDD、MDD领域驱动、测试驱动还是模型驱动?

作者头像
静儿
发布于 2019-05-15 06:02:18
发布于 2019-05-15 06:02:18
4.1K07
代码可运行
举报
文章被收录于专栏:编程一生编程一生
运行总次数:7
代码可运行

提出问题

    「领域驱动设计」之于微服务,好比麦当劳之于汉堡(个人更喜欢肯德基,汉堡要大些,麦当劳的汉堡,想吃顿饱饭,请先给我上6个?)。但是TDD测试驱动、MDD模型驱动好像也很火啊,到底什么在驱动?

分析问题

不用着急,这是三个5分钟就能区分开的概念。开发中在协同工作。

首先纠正两个误区。DDD是Domain-Driven Design领域驱动设计。但是TDD和MDD的D意思是Development开发的意思。TDD对应测试驱动开发,MDD对应模型驱动开发。

这就是为什么很多大佬在大谈特谈「领域」,但是测试驱动、模型驱动其实也都在用,但谈的少些。因为这是我等实际一线写代码的同学才用的。

其次,它们三者之间的关系也不是感官直觉感受到的这种:

而实际上他们是在不同的阶段使用的方法。在我们团队,使用关系是这种:

下面会介绍我们团队怎么用的。

解决问题

在Eric Evans的《领域驱动设计-软件核心复杂性应对之道》中第一节的消化知识开始就开始建模。在我们平时的设计开发中,在描述总体设计思路也需要用模型也表示。一般常使用的图有:

流程图

 https://baike.baidu.com/item/%E6%B5%81%E7%A8%8B%E5%9B%BE

时序图 https://baike.baidu.com/item/%E6%97%B6%E5%BA%8F%E5%9B%BE/3659178?fr=aladdin

实体-联系图 https://baike.baidu.com/item/%E5%AE%9E%E4%BD%93%E5%85%B3%E7%B3%BB%E5%9B%BE/9005309

用例图 https://baike.baidu.com/item/%E7%94%A8%E4%BE%8B%E5%9B%BE/9531932?fr=aladdin

领域模型 https://baike.baidu.com/item/%E9%A2%86%E5%9F%9F%E6%A8%A1%E5%9E%8B/1022567?fr=aladdin

这些本质上是模型驱动开发的一种方法。现在很多公司和组织在研究一些更方便建模的工具。基于MDA(模型驱动架构)的工具涌现的比较多了,但是基本都是收费的。

在我们团队中,会用以文档形式,里面附加常用的图的形式来做初版方案的review。review完之后要进行可行性验证,这种会用代码建立一个demo版本。在这个阶段,需要将完整的测试用例都补充完整,并测试通过。确保测试用例的正确性。开发阶段,测试结果需要和建模阶段的结果一致。

所以可以理解为demo版是一个带有mock的粗糙开发版本。实际的开发阶段是对demo版本的重构。因为demo版实际功能已经实现了,测试用例不需要有改变。这也符合Martin Fowler的《重构-改善既有代码的设计》的思想。

总结

以提出问题为驱动,以解决问题为整合、用输出倒逼输入产品化。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-05-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
再也不被时间束缚:C++ std::chrono时间库全面解析
C++ std::chrono时间库是C++标准库提供的一个时间处理库,提供了一个方便、灵活和精确的时间处理工具,用于在程序中进行时间相关的操作和计算。它具有以下重要性和作用:
Lion 莱恩呀
2024/10/23
1.6K0
再也不被时间束缚:C++ std::chrono时间库全面解析
C++11时间日期库chrono的使用
chrono是C++11中新加入的时间日期操作库,可以方便地进行时间日期操作,主要包含了:duration, time_point, clock。
芯动大师
2023/10/14
4960
C++11时间日期库chrono的使用
【算法】计算程序执行时间(C/C++)
我们在写算法时要考虑到算法的执行效率,有的题目规定了时间限制,我们需要在这个时间之内去解决问题。如果我们需要比对算法的好坏,就需要输出这个程序运行了多长时间。
摆烂小白敲代码
2024/11/24
3520
【算法】计算程序执行时间(C/C++)
详细介绍下C/C++时间相关的那些函数
chrono是一个关于时间的库,起源于boost,现在是C++的标准,话说现在的C++标准好多都是源于boost,要进标准的特性似乎都会先在boost试验一番。
C语言与CPP编程
2020/12/02
7680
详细介绍下C/C++时间相关的那些函数
C++ 11 新特性
nullptr\text{nullptr}nullptr 的出现是为了取代 NULL\text{NULL}NULL,避免 NULL\text{NULL}NULL 的二义性。
f_zyj
2019/05/27
7940
地球时间和 C++ 时间库
GMT 是一个 时区,也指一种 时制。很久以前,科学家通过天文观察,将一个太阳日定义为 86400 秒,以英国 Greenwich 天文台白天平均太阳最高点作为正午 12:00,这样一个相对长度 + 一个绝对时刻,就定义了一套绝对时间体系,也就是 GMT 体系,同时 Greenwich 所在的时区也作为 GMT+0 时区。自1924年2月5日开始,Greenwich 天文台负责每隔一小时向全世界发放调时信息。再后来又从 GMT 升级到了 UT1,本质不变,还是基于天体测量。
JIFF
2019/09/10
3.5K0
地球时间和 C++ 时间库
C++获得毫秒级的时间差
C++的<time.h>头文件中有time和clock可以用来计算时间,但是<chrono>中提供了更加精确的统计时间的方法。 下面的代码支持Windows和Linux,但是要求编译器必须支持C++11。
卡尔曼和玻尔兹曼谁曼
2019/01/22
3.8K0
现代c++中实现精确延时方法总结
这种非常不建议用,懒人做法。不够精确且换种环境系统处理速度不一样可能就是bug来源。
杨永贞
2022/11/21
3.8K0
现代c++中实现精确延时方法总结
C++获取时间
在C++中获取和处理时间可以使用标准库中的多种方法。以下是有关当前时间获取方法的汇总,包括常用的库和示例代码。
ljw695
2024/11/15
2370
C++获取时间
浅析C++中RAII
在C++编程中,RAII(Resource Acquisition Is Initialization,资源获取即初始化)是一种重要的编程范式,被广泛应用于管理资源的生命周期。这种技术通过在对象的构造函数中获取资源,而在析构函数中以获取顺序的逆序释放资源,从而确保资源在对象生命周期内得到正确管理。
程序员的园
2024/07/18
1510
浅析C++中RAII
C++ 使用 chrono 库处理日期和时间
C++11 中提供了日期和时间相关的库 chrono,通过 chrono 库可以很方便地处理日期和时间,为程序的开发提供了便利。chrono 库主要包含三种类型的类:时间间隔duration、时钟clocks、时间点time point。
C语言与CPP编程
2021/09/15
5.4K0
c++ SIMD AVX2比较 例子
生成随机文件代码详见:https://blog.csdn.net/weixin_41644391/article/details/113526563
全栈程序员站长
2022/08/31
4740
掌握C++定时器:构建自己的定时器的分步指南
在c++中,set、map、multiset、multimap使用的是红黑树管理数据。可以利用这几个类实现定时器方案,以set为例,使用C++ 14特性。
Lion 莱恩呀
2024/09/22
3310
掌握C++定时器:构建自己的定时器的分步指南
程序中的时间局部性与空间局部性:深度解析与实际应用
计算机科学中的局部性原理,是描述程序运行时访问模式的一种关键概念。它主要分为时间局部性和空间局部性两个方面,广泛应用于系统优化、硬件设计以及高效软件开发中。以下将分别介绍这两个概念的定义、理论基础、使用场合,并辅以代码示例和现实场景分析,以帮助深入理解。
编程小妖女
2025/01/18
4400
程序中的时间局部性与空间局部性:深度解析与实际应用
影像瓦片切割
Freedom123
2024/03/29
1620
这才是面试官想听到的答案,C++er必须得看看
在函数的开始位置记录下当前时刻,在函数的结尾处再次记录下当前时刻,两者做差即为函数耗时。
程序员的园
2024/07/18
680
这才是面试官想听到的答案,C++er必须得看看
基于腾讯云AI代码助手辅助实现一个C++定时器类的功能实现
最近注意到了腾讯云AI代码助手这款辅助编码工具,正好自己又有一个项目上的小需求,故决定将其求助于AI实现。
晨星成焰
2024/08/09
1570
基于腾讯云AI代码助手辅助实现一个C++定时器类的功能实现
C++性能真的不如C吗?
你好,我是雨乐! 最近在知乎上看了篇帖子,题目是为什么C++没有C语言快,如下图: 恰好之前研究过这块,所以借助本文,分析下这个问题(无意于语言之争,单纯是从技术角度😁)。 众所周知,C++兼容了C的所有功能,显然从所有角度去对比分析是不现实的,所以本文从我们常用的输入输出即标准流(iostream和stdio)的角度来分析讲解。 示例 为了更加直观地来对比分析,写了个示例,通过scanf和cin读文件,然后分析两种方式的性能高低,代码如下: #include <chrono> #include <fu
高性能架构探索
2022/08/25
7490
C++性能真的不如C吗?
C++17中std::chrono::duration和std::chrono::time_point的舍入函数
在C++17中,std::chrono库提供了一组强大的时间处理工具,包括std::chrono::duration和std::chrono::time_point。这些工具不仅支持时间间隔和时间点的表示,还引入了舍入函数,用于将时间值转换为指定精度的近似值。本文将详细介绍这些舍入函数的使用方法和应用场景。
码事漫谈
2025/02/21
1320
C++17中std::chrono::duration和std::chrono::time_point的舍入函数
ROS2获取当前系统时间的方法
system_clock是系统范围的时钟。它是可修改的。比如同步网络时间。所以系统的时间差可能不准。
首飞
2022/07/24
1.9K0
ROS2获取当前系统时间的方法
相关推荐
再也不被时间束缚:C++ std::chrono时间库全面解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验