0.4设计原则

(面向对象)设计原则指软件设计时需要遵循的一系列理想化的原则。搜搜做人的原则,太多了,可是还有人有原则无底线。

1.知多少

在软件开发实践中,各类书籍和文章中会有一些程序设计上的清规戒律。这些原则关注不同的层面、方面。ARTHUR J.RIEL在《OOD启示录》中说:

“你并不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看做警铃,若违背了其中的一条,那么警铃就会响起。”

在许多讨论设计模式的场合(书籍中),介绍得最多的是“类设计的”SOLID

 

  • (SRP) The Single Responsibility Principle
  • (OCP) The Open Closed Principle
  • (LSP) The Liskov Substitution Principle
  • (ISP) The Interface Segregation Principle
  • (DIP) The Dependency Inversion Principle
或多或少,有人添加了
  • 合成复用原则 (Composite Reuse Principle, CRP) 
  • 迪米特法则 ( Law of Demeter, LoD )

在前面介绍了面向对象范式3原则——柏拉图(Plato)原则、Liskov原则和Parnas原则。其中包含了LSP;关于内聚问题,可以作为面向对象分析(OOA)的原则,本书不会深入讨论SRP、ISP;本书抛弃DIP

 
在包设计方面,Robert Martin在他的PPP中有6个原则(如无环依赖原则)。
如果可以,我们还可以列举一些原则,
  • 好莱坞原则(Hollywood Principle )
  • 高内聚与低耦合(High Cohesion and Low Coupling)
  • 关注点分离(Separation of Concerns)
  • 按契约设计(Design by Contract)
  • ★设计上,代码向上集中。★数据向下集中。
  • ★优先使用标准库的异常。
  • ★以private修饰所有的成员变量(Make all Member Variables private.)。
在系统设计时,我很稀罕的几个原则
1 Do not add new functionality unless an implementation cannot complete  a real application without it.(除非不得已,不要添加新的功能)
2 It is as important to decide what a system is not as to decide what it  is. Do not serve all the world's needs, but make the system extensible  so that additional needs can be met in an upwardly compatible fashion.(有所为有所不为。保持系统的扩展性)
3 The only thing worse than generalizing from one example is generalizing  from no example at all.(你的依据呢?你就一条依据?)
4 If a problem is not completely understood, it is probably best to  provide no solution at all.(问题没有搞清楚,解决个毛啊)
5 If you get 90 percent of the desired effect for 10 percent of the work  required to get 100 percent, use the simpler solution.(一成努力得90分,可以得瑟了。)
6 Isolate complexity as much as possible.(隔离复杂性)
7 Provide mechanism rather than policy. In particular, place user interface  policy in the client's hands.(与其提供施行方针不如提供处理机制. 特别将用户介面的施行方针交由客户处理.)
 

2.总原则

  • 高内聚与低耦合(High Cohesion and Low Coupling)
如果要说一个总原则,就是高内聚低耦合。就像“做人要做好人”一样。当然,我们不再需要研究一些学究内容如1) 内聚:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚;2) 内容耦合、公共耦合、控制耦合、特征耦合、数据耦合。
yqj2065把它作为一个总口号。加油,高内聚低耦合。加油,高内聚低耦合。这样子
 

3.我选择

在介绍面向对象设计原则时,我选择如下:
1)遵循面向对象范式3原则——柏拉图(Plato)原则、 Liskov原则和Parnas原则。
2)内聚问题,作为面向对象分析(OOA)的原则,不在这里讨论。所以SRP、ISP不谈了。(这两个原则可以合并)
3)耦合,讨论 编译耦合。你在怎样变化(需求变化)只要不影响我的代码,不要求我重新编译我的代码,就可以了。
所以,我将介绍3个原则:
  • 单向依赖原则。分层架构中的基本原则,也是简化类关系设计的指导原则。合并了包设计的无环依赖原则(Acyclic Dependencies Principle )。此外,介绍callback和好莱坞原则。
  • 抽象依赖原则。代码中要尽可能地使用(依赖)抽象类型,而非具体类。合并了OCP、针对接口编程和我认为要废弃的DIP。
  • 最低依赖原则。依赖数量上,合并迪米特法则;依赖质量(强度)上,合并合成复用原则。
最后,我选择原则最最重要的条件是, 我一看就懂。那种云里雾里的东西,留给别人研究。有菜鸟说了:“我一看半懂,怎么破?”好吧,至少我能够在3分钟内让你懂。如果,3分钟我说不清楚的东西,肯定是我没有搞懂,所以就云里雾里。
 
 

【2019.12】因此,将开放封闭原则作为对应变化的基础性原则,将高内聚与低耦合作为模块划分和依赖管理的总概括,将重构作为设计演化的保底基础。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值