MicroHelper.Net

雷锋说.对待朋友要MicroHelper,对待敌人要害尔扑
随笔 - 74, 评论 - 431, 引用 - 7

导航

工具

关于

邮件系统不稳定,使用songdming at 263 dot net吧
PageRank

FastCounter by bCentral

 

标签

每月存档

广告



访客

 
设计的普遍规律,不只单讲如何设计类,向上到整个组件的设计,向下到类中单个方法的设计
 
单一职责原则——SRP

就一个类而言,应该仅有一个引起它的变化的原因
 
原则

最简单,最单纯的事情最容易控制,最有效
类的职责简单而且集中,避免相同的职责分散到不同的类之中,避免一个类承担过多的职责
减少类之间的耦合
当需求变化时,只修改一个地方

组件

每个组件集中做好一件事情
组件的颗粒度
发布的成本
可重用的成本
 
方法

避免写臃肿的方法
Extract Method
 
重构

Move Field/Move Class
Extract Method/Extract Class
 
最简单的,也是最难以掌握的原则
 
实例分析

Olite

开放封闭原则——OCP

软件实体(类,模块,函数)应该是可以扩展的,但是不可修改的
 
原则
 
对扩展是开放的,当需求改变时我们可以对模块进行扩展,使其具有新的功能
对更改是封闭的,对模块扩展时,不需要改动原来的代码
面对抽象而不是面对细节,抽象比细节活的更长
僵化的设计——如果程序中一处改动产生连锁反应。

方法

条件case   if/else 语句
 
重构

Replace Type Code With Class
Replace Type Code With State/Strategy
Replace Conditional with polymorphism
 
实例

插件
数据驱动的OrderCycle
 
Liskov替换原则 LSP

子类型必须能够替换它的基类型

原则

主要针对继承的设计原则
所有派生类的行为功能必须和客户程序对其基类所期望的保持一致。
派生类必须满足基类和客户程序的约定
IS-A是关于行为方式的,依赖客户程序的调用方式
 
重构

Extract Supper Class
 
实例

长方形和正方形

 
依赖倒置原则DIP

a:高层模块不应依赖于底层模块,两者都应该依赖于抽象
b:抽象不应该依赖于细节,细节应该依赖于抽象
 
原则

如何解释倒置
高层依赖底层,重用变得困难,而最经常重用的就是framework和各个独立的功能组件
高层依赖底层,底层的改动直接反馈到高层,形成依赖的传递
面向接口的编程
 

实例

Ioc模式
DomainObject / DomianObjectDataService
 
参考

《敏捷软件开发 原则、模式与实践》
 

相关文章

打印 | 张贴于 2004-11-30 19:38:00 | Tag:拥抱变化

留言反馈

#回复: Presentation草稿:面向对象设计的基本原则 编辑
是的,模式要实事求是,应该是解决问题为主
我搜集了原则方面的文章,有空去看看吧
http://www.objecttutor.com/search.php?key=原则
2007-10-31 17:26:00 | [匿名用户:objecttutor]
#回复: Presentation草稿:面向对象设计的基本原则 编辑
楼主看来,功力不浅,哈哈
希望能到【面向对象辅导员】交流
2007-08-18 01:10:00 | [匿名用户:ObjectTutor]
#回复: Presentation草稿:面向对象设计的基本原则 编辑
“以行为为中心”,一切应该围绕接口来设计。
“我的原则是面向需求,面向问题.设计开发首先是解决需求和问题的.
其实模式问题只要继承.接口这些真正弄明白了,设计时自然就有自己合适的模式. ”
2006-12-13 14:38:00 | [匿名用户:gargoyle]
#re: Presentation草稿:面向对象设计的基本原则 编辑
我是小朋友,都被你们说晕了.大家说话说明白点
2006-04-05 17:00:00 | [匿名用户:小朋友]
#re: Presentation草稿:面向对象设计的基本原则 编辑
最终你们还是要面向显示器!
2006-04-01 01:46:00 | [匿名用户:NO WAY]
#Design Patterns Step By Step.1 编辑
2005-09-09 13:07:00 | [匿名用户:MicroHelper.Net]
#re: Presentation草稿:面向对象设计的基本原则 编辑
我的原则是面向需求,面向问题.设计开发首先是解决需求和问题的.
其实模式问题只要继承.接口这些真正弄明白了,设计时自然就有自己合适的模式.
2005-08-12 14:51:00 | [匿名用户:todi]
#re: Presentation草稿:面向对象设计的基本原则 编辑
软件设计最重要的是降低系统的复杂性。目标是在满足当前需求的情况下选择最简单的方案,并适度考虑到将来复杂性的发展。原则太多了,其实相互之间会出现冲突。
2005-05-01 11:36:00 | [匿名用户:canonical]
#re: Presentation草稿:面向对象设计的基本原则 编辑
非常同意Rover的说法,我在写程序的过程中发现很多人写程序往往为了模式而模式,舍本逐末。
2005-03-05 00:07:00 | [匿名用户:virtualf]
#re: Presentation草稿:面向对象设计的基本原则 编辑
谈谈我的想法:面向对象编程(OOP)首先考虑的应该是对象,分析设计时也考虑的是对象,根据对象来设计类,而是否要继承要看类有没有共性。对于面向对象的法则来说(单一职责,开放封闭等),它只是一种手段,设计时首先应该考虑的是对象,进而设计类,如果有共性的地方,是否继承一个基类更好(好,加),至于接口,我的理解是对象通过接口向对象发送消息。我的对象是否是稳定的(如果是稳定的,可能我不需要继承接口,直接new一个),设计模式强调针对接口编程,我认为也是一种手段,设计的时候我首先想到的是对象而不是接口,当然定义了接口也就是一种契约,继承的类必须实现,而事实是接口很难设计,有时候总要回过头重新设计接口。设计模式解决了类(对象)的结构问题,解耦等等,它只是一种手段。当我的对象以后可能更换时,就引入一个接口(针对接口编程),可能要使用工厂模式和其他相关模式...我认为设计时首先考虑需求,进而考虑对象,设计类,为了结构、扩展和灵活性使用设计模式,如果一上来就考虑接口和设计模式就造成了为了模式而模式。 我的流程是:需求->用例->对象(域模型,设计类)-->顺序图->边界对象(设计类)=>控制对象(设计类)->改造结构(使用设计模式),考虑面对对象原则。
2004-12-11 19:44:00 | [匿名用户:Rover]
#re: Presentation草稿:面向对象设计的基本原则 编辑
语言支持按合同设计也是一个方向。
2004-12-08 20:46:00 | [匿名用户:microhelper]
#re: Presentation草稿:面向对象设计的基本原则 编辑
兄台最近很少在博客堂现身呀:)

我们所做的一切都是为了一个目标,使软件开发更简单。编写简单,维护简单,修改简单。

围绕着这个目标,我们在不断的实践,实现这个目标,有几个方向,减少耦合,面向抽象,动态生成,数据驱动等等

从面向过程演化到面向对象,虽然最低层的机制是类似的,都是找到地址调用代码段,但是怎么样找到真正需要执行的代码段这是机器要做的事情,程序员可以在抽象的层面考虑问题,可以自顶向下的进行开发,可以在更广的范围考虑代码重用,表达抽象可以用继承、接口或者其他的手段,怎么样更好的利用抽象这一工具也总结出很多设计模式,随着人们的实践,工具的发展,一些新的模式出来,一些旧的模式消亡,接口的用处越来越广泛,传统的面向对象思想在发展,要泛型,要AOP,代码动态生成等等,配置文件越来越复杂,成为与源代码的一部分。

另外,在建模的方面,从代码生成以及双向工程,到集成现成模式到模型中,现在有的工具厂家尝试不用写代码就可以检查建模的正确性,还有的人在推可执行的uml。

总之,让机器越来越聪明,让人做的事情越来越简单。
2004-12-08 20:33:00 | [匿名用户:microhelper]
#re: Presentation草稿:面向对象设计的基本原则 编辑
Quoted from ASD-PPP:

Indeed, it is this inversion of dependencies that is the hallmark of good object-oriented design. It doesn't matter what language a program is written in. If its dependencies are inverted, it has an OO design. If its dependencies are not inverted, it has a procedural design.

也就是说,是否满足DIP原则是区分传统面向过程的设计和正经面向对象设计的关键所在——这是很多所谓面向对象设计者的重要误区,好像用了C++/Java/C#就面向对象了,其实根本就不是这样的。

当然,并不是说其他原则就不重要了,SRP/OCP/LSP等等其实都是用于验证一个设计是否从面向对象设计技术得到实际好处的基本原则。毕竟我们不是为了面向对象而面向对象,我们根本还是要通过利用面向对象技术在软件设计、开发与维护方面实实在在的得到好处,对吧!:)
2004-12-03 22:20:00 | [匿名用户:JGTM'2004 [MVP]]
#re: Presentation草稿:面向对象设计的基本原则 编辑
@JGTM'2004 [MVP]

俺最强调的是开放封闭原则,不管开发人员用什么方法,只要能做到对扩展开放,对修改封闭,不是什么方法,都是好方法 :)

当然OCP可能没有DIP那么好的直接指导实践。
2004-12-02 10:06:00 | [匿名用户:microhelper]
#re: Presentation草稿:面向对象设计的基本原则 编辑
OO的设计原则(包括面向接口的编程等等)大多可以从DIP推导出来——虽然不是所有的场合都需要应用DIP,然而我一直很强调DIP对于OOA/D的重要意义。夸张点儿说,DIP就是OO思想的一切,看一个人懂不懂OO,只要看他会不会灵活应用DIP就差不多了。:)
2004-12-02 01:03:00 | [匿名用户:JGTM'2004 [MVP]]
#re: Presentation草稿:面向对象设计的基本原则 编辑
what on earth are you talk about?
are you talking to the book,<Agile Software Development Principles,Patterns,and Practices>,it is very diffrent what i have read.
2004-12-01 10:38:00 | [匿名用户:leighsword]
#re: Presentation草稿:面向对象设计的基本原则 编辑
一次讲不了那么多
2004-12-01 00:48:00 | [匿名用户:microhelper]
#re: Presentation草稿:面向对象设计的基本原则 编辑
...illuminating
2004-11-30 22:34:00 | [匿名用户:saucer]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode MVC Blogger System