面向对象的原则、模式、语言及框架(二)

[b]一、一些拙劣的设计症结[/b]
说起面向对象的原则,不得不提一些拙劣的一些设计症结,和代码的Bad Smell类似,但他们处于更高的层次,是整个软件结构的Bad Smell.
这些症结主要有:
[b]僵化性(Rigdity):[/b]设计难于改变。
很难对系统进行改动,因为每个改动会迫使许多对系统的其他部分做改动,这往往是系统耦合性太高.
[b]脆弱性(Fragility):[/b]设计易于遭到破坏。
在一次改动时,程序的许多地方都会出问题,而且常常出新问题的地方和改动的地方并没有概念上的联系.这些模块不断的修改,然而你越是修改他们,他们就变的更糟.
[b]牢固性(Immobility):[/b]设计难于重用。
设计中包含了许多对其他系统有用的部分,但是要把这部分从系统中分离出来所需要的努力和风险是巨大的.
[b]粘滞性(Viscosity):[/b]难以做正确的事情。
主要表现在软件的粘滞性和环境的粘滞性。当面临一个改动是,开发人员会有许多的改动方法,有的方法能够保持设计,有的却破坏设计,但是保持设计的方法变得越发难以应用,这就
表明设计具有很高的粘滞性。当开发环境迟钝、低效时,例如编译代码花费的时间很长,开发人员往往被诱使做不会导致大规模重新编译的事情,即时这些改动会破坏设计,这就是环境粘滞。
[b]不必要复杂性(Needless Complexity):[/b]过分设计。
设计包含当前没有用到的部分,开发人员预测需求的可能变化,并放置了处理那些潜在变化的代码,为过多的可能性做准备,导致了绝不会用到的结构。
[b]不必要的重复性(Needless Repetition):[/b]滥用ctr+c,ctrl+v
复制粘贴,许多开发人员惯用的伎俩。当他们需要写一个功能时,在原有的代码中,查找是否有类似的功能,找到后直接拷贝过来,稍加修改便ok了。似乎是个很高效的方法,然而这样导致的结果是缺少必要的抽象,当在一个重复的代码中发现错误或者增加功能时,需要同时更新其他的重复代码。
[b]晦涩性(Opacity):[/b]混乱的表达。
是指模块难以理解,代码需要清晰和富有活力的表达,然而也可能一种晦涩的方式表达,并且当代码随着时间演化时会变得越来越晦涩。这就要求代码的编写者要站在阅读者的角度写代码,写出清晰易于理解的代码。
二、面向对象的设计原则:
单一职责原则(The single responsibility principle)SRP
开-闭原则(the open-close principle) OCP
liskov替换原则(the liskov subsititution principle)LSP
依赖倒置原则(The dependency inversion principle)DIP
接口分离原则(The interface segregation interface)ISP
组合/聚合复用原则(Composition/Aggregation Principle)CARP
迪米特法则 (Law of Demeter)LoD
这些原则是数十年软件工程来之不易的成果,使许多软件开发人员和研究人员思想和著作的结晶。设计中的Bad smell,往往是违反了这几种原则的一种或几种而导致的结果。设计模式都是遵循了这些原则,在特定环境下一类问题的解决方案。分析设计模式从设计原则上分析才能知道为什么要这么设计。后面将要总结这些原则是如何去除设计中的Bad Smell的。当然过度使用这些原则会导致过度设计的Bad Smell.
参考:Bob大叔的《敏捷软件开发:原则、模式与实践》
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值