文章已收录至https://lichong.work,转载请注明原文链接。
ps:欢迎关注公众号“Fun肆编程”或添加我的私人微信交流经验
互联网后微服务时代,软件质量是一个非常让人头疼的问题,而DDD(Domain-Driven Design)被认为是系统老化问题的新希望。众多互联网大厂都在积极推行DDD的落地实践。而对IT程序员,尤其对于高级职位,DDD成了一个越来越重要的技能加分项。 但是DDD只是一套庞大的理论体系,非常多复杂的基础概念成了学习DDD不小的门槛。并且DDD如何落地,目前整个业界都还在一个摸索的阶段。 本文以通俗易懂的风格给大家介绍DDD,降低DDD的学习门槛,尽量在实战中尝试将DDD进行落地。
举例:
我们做个一个商品详情页面,为了提高性能支持秒杀设计了懒加载和页面静态化。随后的迭代开发过程中引入了团购、套餐、活动、预售等等的需求,完成这些需求的过程中后面进来的新人已经不知道前面成堆的代码是怎样的设计了,为了完成功能在页面上引入了ajax从而动态修改价格,后面维护的人也陆陆续续的开始使用ajax从而拖垮系统。
传统MVC架构做设计时习惯于从数据库ER图开始,之后向下维护数据库表,向上设计POJO(贫血模型),有了贫血模型数据实体之后再向上去梳理业务结构,这时候就会开始面向过程方式去编程(事务脚本),这种贫血模型+事务脚本业内戏称为Dada Driven Design。在简单场景下这种架构模式有着短频快速的优点,而且只要ER图确定之后,之后扔给研发去开发其实就大差不差了。
但是,将上述Dada Driven Design模式应用在大型项目中时会造成庞大复杂的事务脚本!
当然现在也有一些方案去优化事务脚本(比方说静态代码检查,利用阿里巴巴开发规范,sonar等),这些方案的真正目的是想要把软件设计的过程分散到每个迭代的过程中,逼得团队成员在每次迭代过程中不得不引用一些设计模式优化代码结构,而不要把架构问题、代码膨胀问题集中到某几次的迭代过程中从而引发需求失控只能重构。
但是,真实的开发过程中,很多设计成了摆设,既起不到作用,还增加了程序复杂度!!!例如上面例子中的页面静态化设计,后期迭代过程中引入了ajax,这个设计就成了过度设计,其实过度设计在项目中总会存在的,我们也没办法去回避这个问题!
因此,这种传统的Dada Driven Design不可避免的会造成系统老化问题。
再思考:
现在:
DDD提供了一整套完整的理论体系解决这些问题,但是缺乏落地实践经验,他不像微服务有成整套的框架体系(例如Spring Cloud),这也造成使用DDD的过程中非常容易走型,一旦走型项目会变得更加混乱。ok,后续文章我会带着问题结合实战来看下DDD是怎样解决这些问题的。
感谢图灵学院-楼兰老师
这个专栏课程我是再看了楼兰老师课程后的二刷总结,一是希望帮助自己巩固学到的内容,二是希望总结能够记录下来帮助到自己和他人。
文章已收录至https://lichong.work,转载请注明原文链接。
ps:欢迎关注公众号“Fun肆编程”或添加我的私人微信交流经验
【前端-开发环境】使用NVM实现不同nodejs版本的自由切换(NVM完整安装使用手册)
【前端-NPM私服】内网使用verdaccio搭建私有npm服务器
【前端-IE兼容】Win10和Win11使用Edge调试前端兼容IE6、IE7、IE8、IE9、IE10、IE11问题
【工具-Shell脚本】java程序产品包模板-linux和windows通用shell启动停止脚本(无需系统安装Java运行环境)
【工具-Nginx】从入门安装到高可用集群搭建
【工具-Nginx】Nginx高性能通用配置文件-注释版-支持防刷限流、可控高并发、HTTP2、防XSS、Gzip、OCSP Stapling、负载、SSL
【工具-WireShark】网络HTTP抓包使用教程
【后端-maven打包】通过profile标签解决同时打jar包 war包需求
【后端-SpringCache】基于Spring Cache封装一个能够批量操作的Redis缓存记录下踩坑历程(pipeline或mget封装)
【后端-SkyWalking】SkyWalking前后端开发环境搭建详细教程步骤-6.x/7.x/8.x版本通用-插件二次开发利器(一)
【后端-Quartz】Springboot整合Quartz支持集群环境-设计业务与框架分离及实现定时任务调度
✨欢迎为耿直少年点赞、关注、收藏!!!