架构恢复与重构的方法
对一些成熟的系统,要延缓其衰老的时间,必须对原系统做出一些改变。这种手段就是系统架构的恢复与重构。它的核心目的就是将含糊的 架构和设计梳理清晰,之后进行架构重构和优化,使系统重焕生机,以便以后的扩展和维护。
架构的恢复和重构可以从以下几个阶段依次展开:确立反向和正向工程的概念、架构和设计恢复、架构和设计重构、系统代码重构。
对一些成熟的系统,要延缓其衰老的时间,必须对原系统做出一些改变。这种手段就是系统架构的恢复与重构。它的核心目的就是将含糊的 架构和设计梳理清晰,之后进行架构重构和优化,使系统重焕生机,以便以后的扩展和维护。
架构的恢复和重构可以从以下几个阶段依次展开:确立反向和正向工程的概念、架构和设计恢复、架构和设计重构、系统代码重构。
第一步便是,确立反向和正向工程的概念,这一步也可以叫做系统重组(Reengineering)。它包括反向工程和正向工程。其中反向工程(Reverse-engineering)包括:
系统分析和架构恢复:弄明白这是个什么样的系统。
SWOT分析:分析系统的优缺点、面临的威胁和改建的机会。
抉择:根据前两部分析的结果来决定是保留还是抛弃这个系统。
而正向工程(Forward-engineering)包括:
建立新的架构远景:包含了以往可用的架构组成部分及计划添加、修改、替换的部分。
建立新的架构基线:将新的架构部分逐渐装进系统架构中,然后立即重构。逐渐的提炼和优化形成新的架构基线。
代码重构:将新的代码部分逐渐装进系统架构中,然后立即重构。逐渐的提炼和优化形成新的代码基线。
系统分析和架构恢复:弄明白这是个什么样的系统。
SWOT分析:分析系统的优缺点、面临的威胁和改建的机会。
抉择:根据前两部分析的结果来决定是保留还是抛弃这个系统。
而正向工程(Forward-engineering)包括:
建立新的架构远景:包含了以往可用的架构组成部分及计划添加、修改、替换的部分。
建立新的架构基线:将新的架构部分逐渐装进系统架构中,然后立即重构。逐渐的提炼和优化形成新的架构基线。
代码重构:将新的代码部分逐渐装进系统架构中,然后立即重构。逐渐的提炼和优化形成新的代码基线。
第二步就是系统架构的恢复,就是把系统还原成它最初设计的初衷和依据的原理。可以说架构恢复是建立在反向工程基础之上的。它主要包括以下部分:对底层结构的恢复、对高层概念的恢复、对程序部分结构组成的恢复、程序代码综合结构恢复、系统结构恢复、基于领域知识和模型的架构恢复、基于设计模式的架构恢复。
一般可将架构恢复划分为五个主要的流程阶段:
系统概念和需求恢复阶段:建立对系统概念和认知,包括业务领域、服务内容、行为轮廓、用户初始需求等,明确界定此次恢复的目标。
系统功能恢复阶段:完整恢复系统所覆盖的业务功能,使用户需求更丰满。
系统架构和设计恢复阶段:根据前面获得的信息,进行架构猜想的建立和验证。
系统编码恢复阶段:将系统代码的结构和关系进行恢复
汇总/对应和验证阶段:验证新的系统,汇总各种文档并使之系统化,以便以后的维护。
一般可将架构恢复划分为五个主要的流程阶段:
系统概念和需求恢复阶段:建立对系统概念和认知,包括业务领域、服务内容、行为轮廓、用户初始需求等,明确界定此次恢复的目标。
系统功能恢复阶段:完整恢复系统所覆盖的业务功能,使用户需求更丰满。
系统架构和设计恢复阶段:根据前面获得的信息,进行架构猜想的建立和验证。
系统编码恢复阶段:将系统代码的结构和关系进行恢复
汇总/对应和验证阶段:验证新的系统,汇总各种文档并使之系统化,以便以后的维护。
第三步是系统架构和设计的重构。它包括文档重构、流程重构、测试重构、数据库重构和组织结构的重构。架构和设计重构的核心任务是按照“不断地去否定以往的系统架构和设计”的原则,力图找到架构和设计中的“坏味道”,然后在不改变系统行为的基础上,调整系统的内部结构,最终使其达到优化的目的。
在这一步可以采用一些重构模式:实体重新命名、转移重复元素、利用抽象的层次结构、以适配方式代替中介方式、合并子系统、强化层间调用、以Message代替RPC、以Caching方式优化资源利用、避免构建Interface的膨胀、使用配置子系统/构件、保持架构和设计的对称。
在这一步可以采用一些重构模式:实体重新命名、转移重复元素、利用抽象的层次结构、以适配方式代替中介方式、合并子系统、强化层间调用、以Message代替RPC、以Caching方式优化资源利用、避免构建Interface的膨胀、使用配置子系统/构件、保持架构和设计的对称。
最后一步就是系统代码重构。经过架构和设计的重构之后,需要在代码层进行重构,以最终完成整个系统的恢复与重构。在系统代码重构中需要注意以下点:
必须创建相应的大量测试用例和Test Suite;
代码重构要遵循小步调的工作规模(小计划、小构想、小改动、小测试);
先拿问题最严重或最危险的部分开刀;
一定要利用测试进行验证,如果测试失败,就需要重复进行上述动作。
————————————————
版权声明:本文为CSDN博主「luoxinwu123」的原创文章
原文链接:https://blog.csdn.net/luoxinwu123/java/article/details/8002710
必须创建相应的大量测试用例和Test Suite;
代码重构要遵循小步调的工作规模(小计划、小构想、小改动、小测试);
先拿问题最严重或最危险的部分开刀;
一定要利用测试进行验证,如果测试失败,就需要重复进行上述动作。
————————————————
版权声明:本文为CSDN博主「luoxinwu123」的原创文章
原文链接:https://blog.csdn.net/luoxinwu123/java/article/details/8002710