对DDD使用的一些建议
群里经常看到类似于“看了DDD之后就不会写代码了”的情况,趁最近学车的间隙,写写我的看法。
关于这个事儿,我是觉得:当没有DDD的时候,如果你知道怎么做,那就那么做好了,不要考虑DDD。
当然不是说学了不用,而是在无法直接与实际做对应的情况下,先不要对应,慢慢来。这是一套方法论,而不是具体的方法,它更多的是给一个对当前系统复杂性手足无措的人一个思路。其中聚合那一部分只是个前提,并不是DDD的重要部分。
初做设计,学习DDD的时候,边看书可以边将内容与面向对象的各种设计原则、基本准则做对比,储备相关知识,领会面向对象的精神。学习设计的时候,完全没必要去考虑DDD该如何落实到代码这种程度。在我看来,DDD就是一种面向对象的最佳实践,就像设计模式是面向对象基本原则的最佳实践一样,当一个新手不知道如何写代码,可以选择性的模仿。
虽说不是系统简单就用不了DDD,“每行代码都是一个设计”,但是初学者应该是在手中的系统变得越来越复杂,涉及的业务对象越来越多而感到困扰的时候,才是能真正利用上DDD。一个新进的设计者这时借助DDD的思路去规划业务、去与其他团队协作,或许才能体会出其中的好处。
当年初出茅庐,遇到了些业务庞大、逻辑复杂的系统。在思考如何解决复杂性的时候,其实已经将业务对象封装成类似“聚合、聚合根”的形式了。只是项目推进的过程遇到了很多问题,也没有根据变化情况区分层次。然后顺着这些问题找到了DDD,它系统地解决了我的问题,并指出了一个方向。
虽说理想情况下是系统逐渐变得复杂,通过敏捷的方式按部就班的演进系统。但是也会有半路接手的问题,这些都是要在方法论思路的指导下灵活掌握的。至于一开始就很复杂的系统,完全可以在T型集成之类的方法下,持续敏捷的去做,就当作是系统再逐渐复杂也无不可。
虽说学习都是从模仿开始的,但DDD应该是模仿其解决复杂性的思路,而不是实现的代码,开发技巧这种层面的事儿。这方面,公众号里只发过两篇(以前博客园博客还写过一些,不过没整理过来),大概谈过这类内容,大家可以参考:《DDD概述》、《观画有感之软件开发》。虽然现在看来也有些可以商榷的地方,但是对初学者应该还是不错的。
最后,我想顺便说一下和微服务的事儿。我认为DDD和微服务是完全不同的两个东西,虽然在一些条件下,它们比较契合。微服务更多的是从技术和团队组织结构上划分的,DDD的子域更多的是从业务逻辑、业务稳定程度方面划分,很多时候确实会有重叠。但学习DDD的时候还是忽略这些重叠比较好,混淆了就出不来了。如果有特别情况,比如中台的业务逻辑按各自领域提供服务,而某一个特别功能的访问量奇大,那它的部署,服务间引用与业务的紧密程度可能并不对应,会需要取舍。
对DDD使用的一些建议的更多相关文章
- [2018-12-07]用ABP入门DDD
前言 ABP框架一直以来都是用DDD(领域驱动设计)作为宣传点之一.但是用过ABP的人都知道,ABP并不是一个严格遵循DDD的开发框架,又或者说,它并没有完整实现DDD的所有概念. 但是反过来说,认真 ...
- 微服务架构 - Jimu(积木) 升级 1.0.0 支持 .Net Core 3.0
如果不知道 Jimu(积木) 是啥,请移步 .Net Core 分布式微服务框架介绍 - Jimu 这次升级除了支持 .Net Core 3.0 还新增部分功能,如 REST, 链路跟踪等,以下为详细 ...
- SCF(SenparcCoreFramework) 系列教程(一):项目介绍及快速搭建
2020年3月25日的“盛派周三分享”活动首次使用直播的方式与大家见面,共有 500 多人参与了活动,得到了众多开发者的好评,并强烈要求我分享 PPT,这点要求当然必须满足啦! 除此以外,还有许多开发 ...
- 初识ABP vNext(1):开篇计划&基础知识
目录 前言 开始 审计(Audit) 本地化(Localization) 事件总线(Event Bus) 多租户(multi-tenancy technology) DDD分层 实体(Entity) ...
- 如何一步一步用DDD设计一个电商网站(五)—— 停下脚步,重新出发
阅读目录 前言 单元测试 纠正错误,重新出发 结语 一.前言 实际编码已经写了2篇了,在这过程中非常感谢有听到观点不同的声音,借着这个契机,今天这篇就把大家提出的建议一个个的过一遍,重新整理,重新出发 ...
- DDD初学指南
去年就打算总结一下,结果新换的工作特别忙,就迟迟没有认真动手.主要内容是很多初学DDD甚至于学习很长时间的同学没有弄明白DDD是什么,适合什么情况.这世界上没有银弹,抛开了适合的场景孤立的去研究DDD ...
- 编写高质量代码:改善Java程序的151个建议(第6章:枚举和注解___建议88~92)
建议88:用枚举实现工厂方法模式更简洁 工厂方法模式(Factory Method Pattern)是" 创建对象的接口,让子类决定实例化哪一个类,并使一个类的实例化延迟到其它子类" ...
- 关于DDD的学习资料汇总
DDD(Domain-Driven Design)领域驱动设计,第一次看到DDD是在学习ABP时,在其中的介绍中看到的.what,DDD是个什么鬼,我不是小白,是大白,没听过.于是乎,度娘查查查,找到 ...
- 初探领域驱动设计(2)Repository在DDD中的应用
概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...
随机推荐
- windows和linux系统下测试端口连通性的命令
0. ping 1. telnet 2. ssh 3. curl 4. wget 5. tcping 6. 总结 本文地址: https://www.cnblogs.com/hchengmx/p/12 ...
- SQL Server默认数据库存放位置
更新记录 2022年6月13日 发布. Windows操作系统 C:\Program Files\Microsoft SQL Server\MSSQLxx_xx.MSSQLSERVER\MSSQL\D ...
- .NET中测试代码运行时间
更新记录 本文迁移自Panda666原博客,原发布时间:2021年6月29日. 计算代码运行的时间,除了呆萌地用秒表去计时,或者可以通过Visual Studio来查看,还可以在.NET代码中使用St ...
- 【小程序自动化Minium】一、框架介绍和环境搭建
微信小程序自动化测试系列分享 一.Minium 简介 minium 是微信团队为小程序专门开发的自动化框架,我们可以用它来做小程序的UI自动化测试,但是它的能力却不仅仅在于UI自动化. 正是得益于官方 ...
- rhel修改系统语言
修改系统语言的三种方式 1.yum install system-config-language //挂载本地源,然后安装 system-config-language 2. ...
- Mybatis中@select注解联合查询
前言 在项目中经常会使用到一些简单的联合查询获取对应的数据信息,我们常规都是会根据对应的mapper接口写对应的mapper.xml的来通过对应的业务方法来调用获取,针对这一点本人感觉有点繁琐,就对@ ...
- springboot项目上传存储图片到七牛云服务器
springboot项目上传存储图片到七牛云服务器 问题描述: 当图片存在本地时会出现卡顿的现象.比如一篇图文混排的文章,如果图片没有加载完,可能整个文章都显示不出来,因为它们都是用的同一个服务器. ...
- CMU15445 (Fall 2019) 之 Project#2 - Hash Table 详解
前言 该实验要求实现一个基于线性探测法的哈希表,但是与直接放在内存中的哈希表不同的是,该实验假设哈希表非常大,无法整个放入内存中,因此需要将哈希表进行分割,将多个键值对放在一个 Page 中,然后搭配 ...
- 一文读懂数仓中的pg_stat
摘要:GaussDB(DWS)在SQL执行过程中,会记录表增删改查相关的运行时统计信息,并在事务提交或回滚后记录到共享的内存中.这些信息可以通过 "pg_stat_all_tables视图& ...
- 聊聊 C++ 大一统的初始化运算符 {}
一:背景 最近发现 C++ 中的类型初始化操作,没有 {} 运算符搞不定的,蛮有意思,今天我们就来逐一列一下各自的用法以及汇编展现,本来想分为 值类型 和 引用类型 两大块,但发现在 C++ 中没这种 ...