DDD & 重构—— 写在前面

最近新接了一个业务系统——社区服务系统,为了快速熟悉和梳理老系统的业务逻辑和代码,同时对老系统代码做一些优化,于是打算花上一个月时间不间断地对老系统服务进行重构。同时,考虑到社区业务的复杂性,想起了之前做用户系统时尝试过的领域驱动建模(简称DDD,英文全称为:Domain Driven Design),思量之下,觉得DDD非常时候这种复杂业务逻辑的系统。毫不迟疑,开搞!

之前在做用户系统时,也尝试使用DDD进行业务建模,但迫于项目工期压力,没有进行深入的学习和建模,最后效果不是很理想,为了避免重蹈覆辙,于是决定先储备好DDD相关知识,再边实践边体会,为此重新学习了Eric Evans的《领域驱动干设计-软件核心复杂性应对之道》和Vaughn Vernon的《实现领域驱动设计》,前者重理论,后者重实现,两者配合相得益彰。

由于是对旧系统的重构,因此,还学习了Martin Flower的神作《重构-改善即有代码的设计》。

通过这些书籍的学习和实际编码实践,得到了很多有价值的东西,包括但不限于:加深对DDD的理解,业务建模的重新认识,OOP的重新认识,重构是一门让完美主义者爱不释手的技艺......

感于此,决定将整个过程中的读书笔记、问题、解决方式、思考过程、心得记录下来,以飨读者,共勉之。

后面的一段时间,会不间断地整理相关内容放上来,欢迎大家一起讨论。

时间: 2024-12-08 20:34:24

DDD & 重构—— 写在前面的相关文章

【DDD】领域驱动设计精要

本文算是<领域驱动设计>这本书的读书笔记,加上自己的一些读后感.网上有很多这本书的读书笔记,但是都是别人的,不如自己总结的理解深刻.建议大家在读这本书时结合<实现领域驱动设计>一起看,同时,一定要去实际建模和编码,理论联系实际才能得其精髓. 本文是[DDD & 重构]系列文章的第一篇,可参考:通过业务系统的重构实践DDD 定义 DDD是Domain driven design(领域驱动设计)的简称,是一种软件设计和开发的方法论,特别适用于复杂业务领域软件设计和开发.可参考w

代码重构之 —— 一堆if、esle 逻辑的处理

这几天,接手一个同事的代码,关于微信接口开发的,那一堆的 if,看得哥蛋痛了,这个毛病也是很多新手容易犯的,所以特地把这次重构写出来. 下面来我们看看这个代码的问题所在,if else 里面的代码块逻辑,不好改,使得它的重用性为 0,并且难以阅读.当然,如果 if 只有一两个,或者3个,这样写是问题不大的. 但是如果多了,这种代码便会让维护变得困难起来. if (strMsgType == "text") { textContentClient = rootElement.Select

重构Web Api程序(Api Controller和Entity)

Insus.NET较习惯做法,是在程序完成之后,抽一些少时间对写好的代码重新审视.比如这些天写的Web Api的程序来说,发现有很多值得重构代码. 开发ASP.NET MVC程序,与数据相关有关联的一般是在控制器与Entity实体之间. 初步重构是把Api控制器OrdersController.cs的程序移至实体OrderEntity.cs中去:第一:重构public IEnumerable<Order> Get()方法, 此方法移至Entity: 这样一移动,那在控制器的Get()方法,就可

机房收费系统个人重构版:透过文档谈文档驱动开发

[背景] 机房收费系统个人重构已接近尾声,在最后阶段自己去补文档以及其中涉及到的图!经过将近一周的奋战将其完善,并最终通过师父的验收.透过这次机房重构写文档和画图,自己感触颇深,在此与大家共享. [文档驱动下软工开发流程] ·软工简介: 从上世纪六十年代的软件危机之后,诞生了软件工程.此后随着人们需求越来越高,导致系统功能复杂度越来越大!要想解开发这样大系统,像之前单个人开发是不可能完成,毫无疑问合作开发就是很好解决方案:但随之而来的是如何控制许多人按照一定的规范在一定时间内将系统按照一定标准完

[数据结构]替罪羊树简介

替罪羊树是不通过旋转而是重构的一种平衡树.当某一棵子树的节点总数超过其父节点的一定时,就进行重构操作. 目录 节点定义 重构操作 插入操作 删除操作 其他各种操作 完整代码&总结 [节点定义] 为了判断是否需要重构,所以需要加入cover(实际节点个数)域.这次直接加入可重操作,所以还需要增加一个size域.为了体现C++面向对象的思想(分明就是Java用多了),所以判断一个子树是否需用重构写成成员函数bad().(真开心,因为是重构,不需要那么多的father,终于可以轻松地删掉父节点指针)

住javaWeb分页实现(模拟百度首页)

本文来源于 http://blog.csdn.net/tjpu_lin/article/details/41050475 近期在开发一个项目,项目中有非常多数据展示的模块.所以要用到分页,网上搜了非常多分页的样例,可是非常多实现的方法和自身的代码实例耦合度太高.导致直接拿来用根本不行. 于是自己仅仅能亲自上阵了,关于分页实现大体逻辑是前台须要和后台相互传递页面參数(比如当前页面,页面大小.总共页数等),后台主要接受前台穿过来的pageNum(当前页码),进行数据查询,然后查完数据后返回给前台的同

RAID 2.0

传统的RAID 1.0: 选几个硬盘—>做成RAID 5—>根据容量创建LUN—>映射给主机 1.重建时间随单盘容量的增大而迅速增加 2.性能上,一个LUN的读写只能在一个磁盘组进行,后面加入新的SSD等介质也发挥不了作用 进击的RAID 1.5: 选几个硬盘—>做RAID 5—>选多个RAID 5组成一个池—>切分为相等的小块Extend—>选择Extend组成LUN 1.读写跨越了更多的硬盘,单个LUN可以包含多个RAID,也可以有多种磁盘可以做到自动分层存储

【java】itoo项目实战之常被忽视的性能优化

Itoo V3.0很快就要结束了,功能上基本上开发完成了,但是放到jboss中部署的时候,使用时感觉特别的慢,如果是数据量多的话,就把慢这个词发挥到了极致.这个慢的问题有大部分是因为基础系统中使用了JPA级联导致的,每次查询的时候,只要有关联的表,都会全部查询出来,一下发出一大版的HQL 语句,看着也是挺吓人的.出来优化JPA级联问题,还可以从代码中下手,从以下的几个方面考虑. (1)减少对象生命周期 对象的生命周期有这么一个计算公式:对象生命周期=销毁时间-创建时间 实际上减少对象生命周期有2

详谈javaWeb分页的实现(模拟百度分页)

本文出自 http://blog.csdn.net/tjpu_lin/article/details/41050475 最近在开发一个项目,项目中有很多数据展示的模块,所以要用到分页,网上搜了很多分页的例子,但是很多实现的方法和自身的代码实例耦合度太高,导致直接拿来用根本不行. 于是自己只能亲自上阵了,关于分页实现大体逻辑是前台需要和后台相互传递页面参数(例如当前页面,页面大小,总共页数等),后台主要接受前台穿过来的pageNum(当前页码),进行数据查询,然后查完数据后返回给前台的同时也要将页