一、重构
重构是什么?为什么要重构?怎么重构?重构怎么应用?… 这一连串的问题,往往在一个有着几年经验的开发者面前浮现出来。同样,做为一个设计者,在DDD设计时,重构同样有着重要的作用。所以重构可以说软件开发者自我优化自我否定和自我提高的一个必然之路。什么是重构,Refactoring有两种理解方式,一种是当成一种定义,那么它就是“对软件内容结构的一种调整,目的是在不改变软件之可察行为的前提下,提高其可理解性,降低其修改成本。”另外一种就是当成一种动作行为即“使用一系列重构准则,在不改变软件之可视行为前提下,调整其结构。"
重构,顾名思意,重新构建。为什么重新构建,如果东西好好的,为什么要重构?那一定是发现什么不合适,不适用,不好维护的地方,而且又有了解决的方法才进行重构。
二、重构的作用
重构的作用其实只有一个,”就是提高程序软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性“。软件从最初设计到投入使用,随着时间的发展和在实际应用中不断暴露出来的问题,使得在运行中出现了一些重要的问题。而在后续的迭代完善中,出于各种目的,往往会背离当初的设计理念,为了修改而修改。同时,一些基于同样业务的新需求也不断被提出来,这在当初可能是无法想象到的。这一切,都会使原有的良好的设计和代码变得有”腐烂“的味道;同时,随着技术的发展,一些新的技术和理念被提出并实践成功。重构,正是将这些条件有机的融合在一起将原有的代码设计及新技术应用等不断的结合起来,通过抽象对原有代码进行的一种巨大变化的重新设计。通过这些设计,能更好的让原有的程序模块化并降低耦合度,提高软件的生命力和适应力。
三、重构的应用
这里重点谈重构在DDD领域的应用,其实DDD正是借鉴了重构在软件上优势进一步提高领域设计的状态管理。在实际的设计中,不可能一蹴而就的设计一个完美的软件。在前面分析过的精炼的过程中,其实对重构应用到的地方非常多。最典型的就是抽象Core的过程,它一定是一个反复的不断的重构的过程。没有人能够从绘纭复杂的场景下每次都一眼看到问题的实质,更没有人能够面对复杂需求不假思索的拿出一个完美的设计。正如精炼中提到的,要先抓住核心领域并不断的在这个基础上对其进行重构和组织达到精炼的目的。
总体上来说,在领域驱动设计中进行重构首先要抓住三部分:
1、 以领域为本
2、用一种不同的方式来看待事物
3、始终坚持与领域专家对话
其实上述的内容就要围绕着领域不跑题,专业人来做专业的事并从不同的角度来解决问题。
首先要明白,领域层面的重构和代码的重构还是有区别的。一个更倾向于模型的认知,一个更倾向于代码的完善和维护。也就是说,即使看上去模型很简单但是如果不符合领域专家的设计则就必须进行重构。换句话说,重构的思想是一致的,但实际可能的表现有所不同。这就需要引起注意。可以通过一些常用的工具如UML和一些通用语言来共同进行领域层面的分析总结,通过借鉴一些成功的经验来不断的提高重构的水平。这样,在不断的重构过程中,加强开发人员和领域专家的互相理解和沟通,提高各自的能力。
一般来说,和软件重构类似,在DDD中,重构是一个持续的反复的过程,可以从一个小的局部开始然后扩大到整个程序,也可以直接对整体进行重构,因时而异,因地制宜,具体情况具体分析。
四、总结
牛顿说他是站在了巨人的肩膀上,人类的进步何尝不是如此。文明的每一次发展,从来都不是偶然的,都是在不断的发展积累过程中,量变到了一个质变的窗口。中国古代有一个婆婆烧水的典故,就非常形象的表明了这一过程。但是听故事人们都明白,一遇到实际情况,反而糊涂起来。学习和实践过程更是如此,一个孩子学走路,你哪看过第一次就走的比大人还稳当的?那不是天才,那是妖怪。
在DDD的设计中,不断保持重构,一定会建立一个相对完善的模型,那这次的软件设计就成功了一大半。