首页 > 其他分享 >对DDD使用的一些建议

对DDD使用的一些建议

时间:2022-08-25 10:45:05浏览次数:64  
标签:建议 代码 系统 业务 面向对象 使用 时候 DDD

    群里经常看到类似于“看了DDD之后就不会写代码了”的情况,趁最近学车的间隙,写写我的看法。

    关于这个事儿,我是觉得:当没有DDD的时候,如果你知道怎么做,那就那么做好了,不要考虑DDD。

    当然不是说学了不用,而是在无法直接与实际做对应的情况下,先不要对应,慢慢来。这是一套方法论,而不是具体的方法,它更多的是给一个对当前系统复杂性手足无措的人一个思路。其中聚合那一部分只是个前提,并不是DDD的重要部分。

    初做设计,学习DDD的时候,边看书可以边将内容与面向对象的各种设计原则、基本准则做对比,储备相关知识,领会面向对象的精神。学习设计的时候,完全没必要去考虑DDD该如何落实到代码这种程度。在我看来,DDD就是一种面向对象的最佳实践,就像设计模式是面向对象基本原则的最佳实践一样,当一个新手不知道如何写代码,可以选择性的模仿。

    虽说不是系统简单就用不了DDD,“每行代码都是一个设计”,但是初学者应该是在手中的系统变得越来越复杂,涉及的业务对象越来越多而感到困扰的时候,才是能真正利用上DDD。一个新进的设计者这时借助DDD的思路去规划业务、去与其他团队协作,或许才能体会出其中的好处。

    当年初出茅庐,遇到了些业务庞大、逻辑复杂的系统。在思考如何解决复杂性的时候,其实已经将业务对象封装成类似“聚合、聚合根”的形式了。只是项目推进的过程遇到了很多问题,也没有根据变化情况区分层次。然后顺着这些问题找到了DDD,它系统地解决了我的问题,并指出了一个方向。

    虽说理想情况下是系统逐渐变得复杂,通过敏捷的方式按部就班的演进系统。但是也会有半路接手的问题,这些都是要在方法论思路的指导下灵活掌握的。至于一开始就很复杂的系统,完全可以在T型集成之类的方法下,持续敏捷的去做,就当作是系统再逐渐复杂也无不可。

    虽说学习都是从模仿开始的,但DDD应该是模仿其解决复杂性的思路,而不是实现的代码,开发技巧这种层面的事儿。这方面,公众号里只发过两篇(以前博客园博客还写过一些,不过没整理过来),大概谈过这类内容,大家可以参考:《DDD概述》、《观画有感之软件开发》。虽然现在看来也有些可以商榷的地方,但是对初学者应该还是不错的。

    最后,我想顺便说一下和微服务的事儿。我认为DDD和微服务是完全不同的两个东西,虽然在一些条件下,它们比较契合。微服务更多的是从技术和团队组织结构上划分的,DDD的子域更多的是从业务逻辑、业务稳定程度方面划分,很多时候确实会有重叠。但学习DDD的时候还是忽略这些重叠比较好,混淆了就出不来了。如果有特别情况,比如中台的业务逻辑按各自领域提供服务,而某一个特别功能的访问量奇大,那它的部署,服务间引用与业务的紧密程度可能并不对应,会需要取舍。


 

标签:建议,代码,系统,业务,面向对象,使用,时候,DDD
From: https://www.cnblogs.com/saaav/p/16623462.html

相关文章

  • vue使用rem (手机端PC端通用)
    只有PC端时main.js newVue({ router, store, render:h=>h(App),created(){//实例创建完成后被立即调用rem换算方法,解决内容闪现问题......
  • 规范:数据埋点集成使用说明
    1.获取和引入 TrackLogData SDK1.1.异步方式(推荐)引入场景:通常情况下使用。1.1.1.本地手动指定sdk版本(vue SPA项目)最新版本: //sa.a5.petrochina/stats/tld.glob......
  • APL概述和使用步骤和Scanner概述及其API文档的使用
    APL概述和使用步骤 概述:API(ApplicationProgrammingInterface),应用程序编程接口。JavaAPl是一本程序员的字典,JDK中提供给我们使用的类的说明文档。这些类将底层的代......
  • MySQL分区介绍与使用
    一、MySQL分区创建 MySQL创建方式一共有四种:range、list、hash和key。1.range(官方文档)1.1intcreatetablestaff(idint(32)notnull,code_varchar(30),......
  • springboot中Filter的使用
    1.bean注入过滤器@BeanpublicFilterRegistrationBeancompanyUrlFilterRegister(){FilterRegistrationBeanregistration=newFilterRegistrationBea......
  • 基于list stream: reduce的使用实例
    目录liststream:reduce的使用reduce一共有三种实现1、第一种2、第二种3、第三种reduce的基本用法1、初识reduce的基本api2、应用场景测试 ......
  • Verilog中函数function写法使用方法
    function写法function的标准写法如下:  函数的语法为:.定义函数时至少要有一个输入参量;可以按照ANSI和module形式直接定义输入端口。例如:function[63:0]alu(input[......
  • 不使用骨架创建maven的java工程、使用骨架创建maven的web工程
    不使用骨架创建maven的java工程    使用骨架创建maven的web工程  选入web框架 ......
  • Makefile的使用
    1概要软件的分层使软件的逻辑关系更清晰,但是也带来一个副作用,即Makefile也变得复杂了。道理显而易见:对于一个简单项目,如果所有文件都放在同一个文件夹内,Makefile写起来也......
  • 使用Quic协议加速网络
    2022年6月6日,IETFQUIC和HTTP工作组成员RobinMark在推特上宣布,历时5年,HTTP/3终于被标准化为RFC,这也标志值QUIC作为http/3的底层传输协议的地位正式宣布转正。之前我也简......