设计模式和代码重构什么是优秀的设计抗拒变化是无用的他们不知道自己需要什么,因此也无法提出要求他们知道自己需要什么,但不知道如何说明它他们能够说明,但我们误解了他们我们理解了,但漏掉了隐含的意义、优先级或细节所有这一切都没问题,但市场总会变化软件需求变更法则软件不断变更法则:真实世界中使用的程序必须进行变更,否则它在环境中的作用就会越来越小.敏捷思想最大的贡献-1对软件需求变化的态度传统工程学里有一个基本假设是,需要对未来有很详细的计划和预测,有清晰的进度和流程。但其实软件开发非常不同,它包含很多艺术的成分,人的创造力至关重要,而且软件的需求非常易变。而敏捷对预测未来的方式是全新的,强调通过提高团队的能力、设计的弹性和流程的灵活性来适应变化。这种思路对软件开发也是很大的冲击。案例分析-1需求描述?? 客户名称:影片租赁连锁企业?? 统名称:影片租赁管理系统?? 需求描述:?? 1:完成影片连锁企业租赁管理系统, 可以计算每一位客户的消费金额和影片的详细信息,金额根据影片的类型和租赁的日期来进行计算.?? 2:客户把影片分成3类进行管理 A:最新电影 B:普通电影 C:儿童影片. ?? 3:费用计算规则如下?? a:是普通电影,如果租期小于2天,费用为2元钱.如果租期大于两天,费用是租期减去2,每天1.5元?? b:如果是新片电影,费用为每天3元?? c:是儿童电影,如果租期小于3天,费用为1.5元钱.如果租期大于三天,费用是租期减去3,每天1.5元?? 4:每次客户租赁电影可以为客户积累积分,规则是每次累计增加1分. 如果是新片,并且租期大于1天,再增加一分?? 5:暂且不要考虑系统界面问题和系统的存储问题总结增加一个功能特性的成本并不单单是为这些功能编码所花费时间的成本,还应该包括特性扩展的障碍成本。什么是好的设计一个好的系统设计应该有如下的性质:可扩展性、灵活性、可插入性。好的设计的目标可扩展性(Extensibility): 新的功能可以很容易地加入到系统之中,这就是可扩展性.灵活性(Flexiblity) :可以容许代码修改平稳,而不会波及到很多其他的模块.这就是灵活性可插入性(Pluggability) :可以很容易地将一个类抽出去,同时将另一个有同样接口的类加入进来.这就是可插入性.开放-封闭原则(OCP)软件组成实体(类,模块,函数,等等)应该是可扩展的,但是不可修改的。 即软件实体可以通过增加新代码实现扩展,但是不能修改已有的代码 任何系统在其生命周期中都会发生变化。如果我们希望开发出的系统不会在第一版本后就被抛弃,那么我们就必须牢牢记住这一点。优秀设计发现变化/封装变化隔离变化动态绑定解耦具体依赖适应变化好的程序设计所面临的最主要的挑战之一就是适应变化.设计原则1:发现变化,封装变化找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起.实现:把会变化的部分取出并封装起来,以便以后可以轻易地改动和扩充此部分,而不影响不需要变化的其他部分.抽象稳定接口设计设计原则2:抽象稳定接口,针对接口抽象接口:创建出固定却能描述一组任意个可能行为的抽象体,这个抽象就像抽象基类或者接口,任意个可能的行为就是可能的派生类.针对接口(抽象)设计:由于模块子间依赖一个固定的抽象,所以它对于更改可以是关闭的.设计原则3:分离变化维度,单一职责原则单一原则:就一个类而言,应该仅有一个引起它变化的原因.职责定义为 “变化的原因(a reason for change)”,如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责.静态绑定 与 动态绑定代码结构在编译时刻就被确定下来了,比如它由继承关系固定的类组成,或者硬编码实现等。而程序的运行时刻结构是由快速变化的对象实现。编译时两个结构是彼此独立的。蜡笔(粗细的变化和颜色的变化,静态绑定)画笔(粗细的变化和颜色的变化,分离,动态绑定)设计原则4:尽量动态绑定,组合/聚合复用原则尽量的使用合成和聚合,而不是继承关系达到复用的目的。该原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的。多态与继承继承是多态的基础,多态是继承的目的!!!N×M PK N+M解耦具体依赖4种方式配置文件与反射技术表驱动法惯例优于配置依赖注入方案1-配置文件与反射技术将反射技术与配置文件结合,在具体对象拥有共同抽象的前提下,通过配置文件获得具体的对象类型,然后利用反射创建相应对象.必须知道的设计法则找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码交织在一起.抽象稳定接口(抽象类),针对接口编程,而不是针对实现编程分离变化维度,单一职责原则动态绑定还是静态绑定,多用组合,少用继承创建与使
原创力文档

文档评论(0)