间接

设计模式归结到最后只有两个字:间接

有道理 或者说 引入中间者,这也是中间件来历。现在已经从数据库时代进入了中间件时代,内在原始驱动力是设计模式

还记得我引用过一句话:“所有的软件设计的问题都可以通过增加一个抽象的间接层而得到解决或者得到简化!!!”

设计模式是关于软件设计的模式,正是教我们具体如何去增加这个抽象的间接层。要想直接,则先间接,以迂为直,则畅通无阻。做人要像水,做软件设计也要像水,遇到阻碍就绕个弯,没有跨不过去的坎。

>做软件设计也要像水,遇到阻碍就绕个弯,没有跨不过去的坎
同意,软件实质是一种解决方案,这也是IBM转型软件后以解决方案自居的原因,解决方案就是考验人处理事情的能力,因此,考验一个程序员能力强否,就看他平时处理一般事情的能力,如果普通事情都处理不好,那么做软件无疑是害了老板和客户。

老子的道经常用“水”来比喻,“厚德载物”中也有水的含义,厚德其实就是做人做事都要象水一样,知道这个道理并且去做,就算有德之人,长时间累积后便至“厚”。

我用一个字:分。

在设计上对关注的分离,各对象的分工。

一个复杂逻辑可以分解成几个简单逻辑的组合,其关键在于结构,设计模式的结构就是基于MVC的。

利用结构来降低复杂度,这是OO的宗旨,当然也会反应到设计模式当中。

我个人还是强调先从结构来体会,那些间接,以及抽象都是为一个能够承载复杂度的结构来服务的。

>>我个人还是强调先从结构来体会,那些间接,以及抽象都是为一个能够承载复杂度>>的结构来服务的。

基本同意。

一个对象具有什么样的功能基本上是由它的静态结构所决定的,静为动君嘛。而对象的结构可以从两个方面来认识,一是它是由什么组成的,即它的组成元素,不同的组成元素组成的东西当然也完全不一样;另外一点就是这些组成元素的顺序,对象的结构都是有序的,不同的顺序所表达的信息和所具有的功能也是完全不一样的,比如“上”和“海”两个字,可以有“上海”和“海上”两种顺序,但表达出来的信息却是完全不一样。

所以面向对象的分析设计主要还是确定如何最贴近现实地把对象结构给描述出来,结构定了,它应该有什么样的功能即给它分配什么样的职责基本上也就确定了。

killer总结其实一语道破了为什么我们领域建模时抓住class model这样静态图不放的原因。

>,一是它是由什么组成的,即它的组成元素
这就是从需求中提炼业务模型对象,对象有哪些约束,这些约束区别了这个对象而不是那个对象。

>对象的结构都是有序的,不同的顺序所表达的信息和所具有的功能也是完全不一样的
我们在对象建模时,对象之间关联有双向 单向就是这个道理,尽量使用单向关联,因为顺序很重要,不要随便使用双向关联,这个概念在数据库的关系中就没有,丢失了,所以我们能用数据库来分析代表现实的需求吗?



一直以来,我认为在很多知识的学习中,都可以秉承这样的方法:
我们定义科学方法在于有序地分类事实,紧接着辨认它们的关系和重现的顺序。
(引自《科学的规范》第20页,卡尔.皮尔逊 1892年著 李醒民 译 1999版)
我将其化为6个字: 分类, 关联, 排序。

具体如何投射到面向对象中,前面几段高见已经说明了一些东西。

分类其实也是一个抽象、提取事物本质并分别的一个过程。分是指分别,类是指类似,分类其实是先类再分,依据事物本质来分类,提取本质是类,是一个“共”的过程。推而共之,共者有共,直至大共名。分是一个“别”的过程,推而别之,别者有别,直至大别名。