作者ellinas (keep your faith !)
看板CSSE
标题Re: [问题] 反design pattern的见解
时间Fri Feb 9 09:25:29 2007
※ 引述《tinlans ( )》之铭言:
: visitor 我印象中跟 double dispatch 没啥关系,
: double dispatch 是 multimethod 的一种实现方式,
: 的确像是 Haskell 和 Dylan 这些语言就有支援,
: 主要是你希望 obja.method(objb) 这样写的时候,
: 实际会是哪个 method 被 call 到,
: 不但要看 obja 的实际型别,
: 还要看 objb 的实际型别才能决定,
: 否则你必然得在 obja 实际型别的 method 里,
: 写一大串 if else 搭 typeid 和 dynamic_cast 判断 objb 的实际型别才能搞定,
: 这个部分通常被称为 type switch,
: 在 C++ 的 OO 程式码里算是一大恶例。
似乎与我的认知不太一样
因为在GoF的书中 在visitor的实作部份有写道
visitor要达成的效果就是double dispatch
: : 版上各位对design pattern的看法又是如何呢?在实际使用方面呢?
: : 我平常写程式时也常会使用一些基本的pattern
: : 像是singleton, factory, visitor 但对有些pattern还是未能运用自如
: : 我觉得pattern是还蛮重要的 可以把思考提升一个层次
: : 学习pattern除了看书外 假如能碰到需要使用的场合
: : 使用过几次 看到问题就能想到pattern
: : 这方面光看书应该比较难体会 一些实务经验似乎是必需
: : 版主之前有发表过关於pattern的文章 但似乎是持反对立场
: : 不知道我们应该对pattern持什麽样的态度呢?
: singleton 和 factory 简单来说就是防白目用的,
: 或是防止自己耍白痴,
: team work 的时候常常有很多白目讲不听又不看文件和注解,
: 白话来说这两个 patterns 是预防这些状况发生的策略之一,
: 不过考试这样作答零分就是了,
: 因为它们存在的意义不只是这些,
: 我没讲的教科书应该都有讲了。
没错 把规则写到CODE里
比写到文件里有用得多
但是还是有人会"咦 这个class怎麽没ctor 我改一下api喔" Orz
: visitor 的话我建议是尽量少用,
: 它在 OO design pattern 界里面受争议的程度,
: 跟 procedural programming 里的 goto 差不多,
: 不是绝对不可以用,
: 也不是说用了一定会不好,
: 而且也的确有它有用的地方。
: 至於用到它的时机,
: 简单说就是做一些 dirty work 的时候会用到,
: 一般来说会伴随着实务上某些奇怪的要求,
: 才会让你非用它不可,
: 它的实现手法事实上也蛮肮脏的。
compiler实作时有时需要爬很多树
像AST, IL等 也算是visitor最典型的用法
不知道大大指的的dirty work是指什麽 可以给个明确的例子吗
这方面经验不多 还请大大指教
: : [1] http://fcamel.twbbs.org/archives/2007/01/14/247/
: : [2] http://en.wikipedia.org/wiki/Design_pattern_(computer_science)#Criticism
: : [3] http://en.wikipedia.org/wiki/Double_dispatch
昨天又想了一下 想到「人月神话」中的no silver bullet
软体的问题有2种
一种是Essential Difficulties 另一种是Accidental Difficulties
像是design pattern解决的算是因为工具选择所带来的Accidental Difficulties
还是软体本来就需要套用pattern?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.30.72.148
※ 编辑: ellinas 来自: 61.30.72.148 (02/09 09:34)
※ 编辑: ellinas 来自: 61.30.72.148 (02/09 09:45)