您的位置:首页 > 运维架构 > 网站架构

Prefactoring

2011-12-06 17:28 441 查看
利用经验累积而得的洞察力开发新的解决方案被称为预构。透过重构而获得的专业知识也属于这类经验,而预构的词源即重构。重构是修改程序或软件系统内部结构的实践,以此在保留其现有行为的基础上改良设计。重构的原因有多种:方便后期增加功能、提高可维护性、提升性能。

  本书作者是经验老道的软件开发人员。书中,作者运用他个人和其他众多开发人员的丰富经验,展示由其推衍而得的各项实践方针。这些方针把优秀的开发人员在设计时隐而未显的考虑细节如实地呈现出来。许多方针都围绕着极致抽象化、极致隔离以及极致可读性这几个概念。在假想的软件项目和实际项目的介绍中,作者把实践方针呈现在读者面前。其中几条于稍后列出。
  把作者的方针应用到你的软件项目,有助于写出可读性、可维护性更棒的程序。这些方针可以协助你前期决策,以减少后期重构的工作量。在这样的前提下,你可以预测未来,减少修改。简言之,就是程序预构会使你更有效率。

========================================

本书主要的观点是:根据自己或他人多年的软件开发经验,整理成开发项目时的指导方针,以利于未来项目启始时做为遵循的准则。它与重构的差别主要在于执行的时间点,Prefactoring是在项目开始前就先行思考,并非在项目执行期间才发生。 下面转有关的书评

   

早从1999年Martin Fowler的著作至今,重构(Refactoring)似乎已经成为提升软件质量的重要观念,但软件项目常常会因为时程压力及人力不足的现实问题,在项目执行的过程中进行Refactoring是很难被允许的。以项目管理的观念看来,这是需要花费时间与金钱的。故在架构设计及程序撰写上,这样的观念就相对地不被重视,程序开发人员也都以「只要将功能开发出来」的想法来运作。

重构的实现较易在软件产品研发上,落实在版本更新的规划中,不过产品规划的时程也不见得允许重构,因为Refactoring不会改变任何外部功能;而依客户需求量身订做的客制化软件项目,甚至涉及到系统整合的案例,则更难以将重构落实在项目中。

累积预防经验有助于日后项目发展

有鉴于Refactoring不易落实,所以一个适应性的做法-Prefactoring(预构)也许是个另类的解决方式。作者Ken Pugh提出这样的观念,根据自己或他人多年的软件开发经验,整理成开发项目时的指导方针,以利于未来项目启始时做为遵循的准则。它与重构的差别主要在于执行的时间点,Prefactoring是在项目开始前就先行思考,并非在项目执行期间才发生。

这里的指导方针有绝大部份跟一般基本的设计原则(像是OOAD的特性)相符,而其它的方针则主要围绕在分析抽象化(Extreme Abstraction),设计分离(Extreme Separation),提供可读性(Extreme Readability),以及接口设计(Interface)几个重点上。

抽象化设计其实已经是对象导件分析设计中的重要观念,强调「做什么(What)」而非「如何去做(How)」。所以在这个过程中,很难意会到实作时的细节,容易造成分析阶段到设计阶段时实现(Realization)的落差。针对这个问题,本书建议在抽象化设计时搭配雏型系统(Prototype)的使用,而在设计过程中使用与特定式语言与无关的的方式,采OOAD之标准原则(像是Class、Interface、Exception等)来进行设计。

分离设计最常见的方式,便是将操作画面的呈现与商业逻辑,以不同的组件各司其职。在日后需求变动时,不会牵一发而动全身;而为了日后维护容易,写出来的程序代码不仅是给计算机看,也要让人能轻易地看得懂。本书建议最理想的程序是连您的客户都看得懂。

预构强调软件开发流程与方法

本书的内容共分成十七个章节,作者以开发一套CD出租店系统的虚拟故事为主轴,说明在进行一项软件项目时会面临到的课题。开宗明义不免俗地简介Prefactoring的观念以及其基本方针,接下来便从与老板Sam聊起他理想中的系统应该长什么样子开始,文中不时穿插主角与客户之间的对话,活生生地如同您在与客户之间的沟通互动。

为了精确掌握使用者在想什么,首先厘清字词明确的描述(光CDTitle、CDRelease、CDDisc的定义就引起一番争论),再将相关的字词分类归纳,转化成对象的方式来设计。这里头像是一些常见对象设计原则就会被讨论到,像是多形(Polymorphism)、抽象化数据型态(Abstract Data Type)等等,甚至直接用一个雏型系统(Prototype)来与使用者确认需求内容的正确性。

虽然设计必须奉行理论,但还是有无法被落实的状况发生。起因可能是与使用者想法的不一致,对事物解读的误解。但这些软件开发的准则并不是标准答案,就像是开车一样,每个人都有自己的风格,重要的是让自己面临类似问题时能快速且有效地解决。而且每个准则都有适用的使用时机,而非一条鞭式地适用于任何状况。

就本书的内容看来,还是在强调软件开发流程与方法的重要性。在每个章节中作者以座右铭的方式提醒需要强调的重点,并在书末的附录中整理了所有的原则。如果了解对象导向分析设计的重要,同时亦希望用省时省钱的方法来进行项目,本书也许可以提供一些想法,虽然无法保证从此不需要Refactoring,但次数的减少是可以肯定的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息