作者reader (读者)
看板CSSE
标题Re: [问题] 反design pattern的见解
时间Fri Feb 9 23:53:09 2007
※ 引述《tinlans ( )》之铭言:
: pattern 不是没写过程式的人一开始需要学的,
: 而是要先写过很多结构烂烂的程式,
: 自己认真思考过怎样改比较好一段时间後,
: 才适合开始去学来用的东西。
: 对於撰写需要抽象化的程式部分来说,
: 比较没经验的,刚下手一定是结构紊乱的程式码,
: 稍有经验的,刚下手会是比较有规律性,但欠缺抽象化的程式码,
: 很有经验的,一下手可能就是很抽象化的程式码,但不是任何已知的 pattern,
^^^^^^^^^^^^^^^^^^^^^^
: 超有经验的,一下手通常就会是 pattern。
实际上已知的 pattern 是极多的,记得以前有人列出了超过两百个。
传说中集合 256 个 pattern 就能解决一切问题 XD
(这个传说应该是因为 Pattern Language 列出了 253 个建筑用的 pattern,
非常接近 256 这个电脑的"吉祥数" ^^)
Design Patterns 一书所列出的,其实是集中在 design 层次,并且加以简化
整合的结果。
原本 pattern language 的关键,就在於以 pattern 为思考的主要元素,并
不断发现与整合 pattern, 而不是把 pattern 限制为特定几个。
当然,尽量运用较多人熟悉的 pattern 有助於软体的共同合作开发。只使用
少数 pattern 的效益也是很明显的,这是 Design Patterns 一书的成功,但
让许多人以为世界上的 pattern 就是那几种,也是它的原罪。
另外,就 pattern 而言,其实并不是只有 design pattern 一类,我想,应该
可以分为以下几类的 pattern:
1. patterns for software architecture
大约包括了 architecture patterns, requirement patterns, ananysis
patterns, conceptual patterns, data model patterns 等等细类或不同
名称。
2. patterns for software design
除了 Design Patterns 列出的 generic patterns 之外,还有特定用途的
patterns, 例如针对 communication / network / parallel computing /
distributed computing / database management 等等特定程式设计方向的
patterns.
3. patterns for programming
在 POSA (Patterns of Software Architecture) 一书中称为 Idioms, 是
较低阶的 patterns, 主要是一些惯用的程式设计方式。有些人认为应该要
分成 coding patterns 和 programming patterns, 不过这主要是名词的
差异问题而已。
现在很多人因为只知道 Design Patterns 一书所列出的 patterns, 而将三种
不同层次的 patterns 都用少数 generic design patterns 来处理,造成学习
和使用上的负担,其实那是没有必要的,若能善加利用不同层次的 patterns,
可以得到更有效的开发。
4. patterns for business process
由於商业处理的复杂性,以及相关开发经验的累积,近年来不断有人提出
business process patterns 的重要性,也就是 pattern 的概念,不应该
只限於程式逻辑,或是通用的软体结构分析,也适用於商业流程的分析处理
才对。这可能还不是成熟的方法,但发展潜力颇值得观察。
5. patterns for organization
这大概是最为抽象化的 patterns 了,它尝试着解决「创新」和「组织」的
问题,主要是针对需要高度创新的软体组织,如何从人事和工作的组织上就
引入 pattern 的概念。
关於这部分,我的认识有限,似乎 Organizational Patterns of Agile
Software Development 一书颇受推崇,可以参考看看。
pattern language 是一种针对人类认知和思维方式而建立的新方法论,从建筑
开始逐渐渗透到各个领域上,试图为人类的创新活动建立一个可以依循的理论,
而 Design Patterns 是过去的一个里程碑,但人们继续在往前走,未来也还有
许多路要走。
将 Design Patterns 列出的 patterns 做为软体开发训练中的一个重要成分,
是一个值得尝试却可能不适合冒进的方法。所谓「叔叔有练过小孩子不要乱学」
确是很好的注解。
不过,更适合的比喻,或许还是武功吧, design pattern 如同剑法一般,要先
打好基础才可以学,剑都拿不稳的,就不用想学剑法了,而学的时候应该要好好
学习,学成之後则不要自限於剑招而不知变通。
不求剑招只求剑意也可以,而且可能更能得到剑法的真意,然而,你最好是非常
聪明,不然高不成低不就的,会很辛苦。
此外,我相当推荐 Pattern-Oriented Software Architecture 这套书,目前有
三本。其中第一本也得到 1996 Jolt Awards 的生产力奖。
它除了强调 architecture patterns, 很有力地补充 Design Patterns 的不足
之外,最重要的概念,应该就是 pattern catelog 和 pattern system 的分别,
许多人运用 pattern 实际上只是在把 pattern 当作一种软体结构的形录,没有
适当地从系统的观点来结合 pattern, 使它们能相互支援和整合。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.125.136.160
1F:推 godfat:感动 02/10 01:08
2F:推 YuYuHo:大大可不可以把这些好书翻成中文ㄚ,弱者英文超破,很难看懂. 02/10 23:12
3F:推 jeonjh:名称查一下就好了,这些都算基本!要加强一下英文吧?... 02/16 14:02