最近一直看Robert C.Martin 的Agile Software Development—Principles, Patterns and Practices
面向对象设计原则上总结的相当不错,也结合我日常在工作写的实例确实让人有一定收获和体会,第一遍也许只是粗略读过,但回过头再看以前项目设计上 细细品味 确实感到好的设计 不仅需要独到而成熟的创意 而且如果把自我经验加以总结 在日积月累中形成一种默认或者潜意识里的原则,来处理日常项目开发中各种实际问题,以不变应万变,工作中不仅要有量的积累,如果在这个量的基础上加以提升和升华 确实能看到你这个范围内看不到的风景和高度, 这也是一个好的程序员必备的一点素质,当然读这个影印版确实有点吃力, 有些地方理解并不是很到位 但每次返回来读效果都不一样 这也是我看这个影印版 最令人激动的地方. 打算自己写点关于这方面的实例
SRP:—单一职责原则
就一个类而言,保证有且仅有一个元素能够引起它的变化
OCP:开闭原则
软件实体(设计中类,业务函数等)允许扩展,但是不可修改
LSP:Liskov替换原则
子类型必须能够替换掉它们的基类型
DIP:依赖倒置原则
抽象不应该依赖于细节 细节应该依赖于抽象
ISP:接口隔离原则
接口属于客户,不属于它所在的类层次结构,不应该强迫客户依赖于它们不用的方法,同时极力避免接口污染
REP:重用发布等价原则
重用粒度就是发布粒度
CCP:共同封闭原则
包中的所有类对于同一类性质的变化应该是共同封闭的,一个变化若对另一个包产生影响,则将对该报中的所有类产生影响,而独立其他包,对其他包不照成任何影响
CRP:共同重用原则
一个包中的所有类应该是共同重用的,如果重用了包中的一个类.那么就要重用包中所有的类
ADP:无依赖原则
在包的依赖关系图中不允许存在环
SDP:稳定依赖原则
朝着稳定的方向进行依赖
SAP:稳定抽象原则
包的抽象程度应该和其稳定程度保持一致,并保持这种关系平衡
上面只是敏捷设计中面向对象设计的基本原则,这些原则对于我们这些开发人员来说能够在底层消除设计中出现的臭味,并为当前的特性集构建出最好的设计, 其实规定这些就是设计中细节上钉上钉子,你应该保持这些钉子而不是硬顶,类似一个好的精装的房屋装修, 精装这个形容词描叙的是整个房屋的设计, 如果对于某个具体的房间为了达到精装的效果,具体的规则就不同,类似厨房以简洁时尚 客厅商务突出品味, 主卧可以温馨典雅, 虽然每个房间设计的原则不同,但是达到一个统一既定的目标
即敏捷设计的目的:以微小增量的方式构建软件.
敏捷中所谓的微小增量方式:每次的迭代中尽可能的使设计基于当前系统,开发团队不用把精力发在未来的需求上,也不用今天构建好一些基础结构是为了将来能够使用到,我们工作是专注当前系统,并把它用到极致,敏捷这点微量增加更具有实用性 可操作性
在Robert c.Marthin这个影印版中说的面向对象设计原则.是数十年软件工程经验总结出来的成果,而非某一人,虽然在此称为面向对象设计原则,但是事实是他们只是软件工程中一直存在的原则特例而已.
面向对象设计原则上总结的相当不错,也结合我日常在工作写的实例确实让人有一定收获和体会,第一遍也许只是粗略读过,但回过头再看以前项目设计上 细细品味 确实感到好的设计 不仅需要独到而成熟的创意 而且如果把自我经验加以总结 在日积月累中形成一种默认或者潜意识里的原则,来处理日常项目开发中各种实际问题,以不变应万变,工作中不仅要有量的积累,如果在这个量的基础上加以提升和升华 确实能看到你这个范围内看不到的风景和高度, 这也是一个好的程序员必备的一点素质,当然读这个影印版确实有点吃力, 有些地方理解并不是很到位 但每次返回来读效果都不一样 这也是我看这个影印版 最令人激动的地方. 打算自己写点关于这方面的实例
SRP:—单一职责原则
就一个类而言,保证有且仅有一个元素能够引起它的变化
OCP:开闭原则
软件实体(设计中类,业务函数等)允许扩展,但是不可修改
LSP:Liskov替换原则
子类型必须能够替换掉它们的基类型
DIP:依赖倒置原则
抽象不应该依赖于细节 细节应该依赖于抽象
ISP:接口隔离原则
接口属于客户,不属于它所在的类层次结构,不应该强迫客户依赖于它们不用的方法,同时极力避免接口污染
REP:重用发布等价原则
重用粒度就是发布粒度
CCP:共同封闭原则
包中的所有类对于同一类性质的变化应该是共同封闭的,一个变化若对另一个包产生影响,则将对该报中的所有类产生影响,而独立其他包,对其他包不照成任何影响
CRP:共同重用原则
一个包中的所有类应该是共同重用的,如果重用了包中的一个类.那么就要重用包中所有的类
ADP:无依赖原则
在包的依赖关系图中不允许存在环
SDP:稳定依赖原则
朝着稳定的方向进行依赖
SAP:稳定抽象原则
包的抽象程度应该和其稳定程度保持一致,并保持这种关系平衡
上面只是敏捷设计中面向对象设计的基本原则,这些原则对于我们这些开发人员来说能够在底层消除设计中出现的臭味,并为当前的特性集构建出最好的设计, 其实规定这些就是设计中细节上钉上钉子,你应该保持这些钉子而不是硬顶,类似一个好的精装的房屋装修, 精装这个形容词描叙的是整个房屋的设计, 如果对于某个具体的房间为了达到精装的效果,具体的规则就不同,类似厨房以简洁时尚 客厅商务突出品味, 主卧可以温馨典雅, 虽然每个房间设计的原则不同,但是达到一个统一既定的目标
即敏捷设计的目的:以微小增量的方式构建软件.
敏捷中所谓的微小增量方式:每次的迭代中尽可能的使设计基于当前系统,开发团队不用把精力发在未来的需求上,也不用今天构建好一些基础结构是为了将来能够使用到,我们工作是专注当前系统,并把它用到极致,敏捷这点微量增加更具有实用性 可操作性
在Robert c.Marthin这个影印版中说的面向对象设计原则.是数十年软件工程经验总结出来的成果,而非某一人,虽然在此称为面向对象设计原则,但是事实是他们只是软件工程中一直存在的原则特例而已.