最近读了Martin Fowler的几篇文章:
Avoid Repitition: martinfowler.com/ieeeSoftware/repetition.pdf
Separating User Interface Code: martinfowler.com/ieeeSoftware/separation.pdf
Reducing Coupling: martinfowler. com/ieeeSoftware/coupling.pdf
To Be Explicit: martinfowler.com/ieeeSoftware/explicit.pdf
觉得很好,不敢独享,拿出来分享。
大师讨论了一些软件设计模式背后的力量:
"We can learn from the specific
solutions they convey and
from the thinking process that leads to their
development. The thinking process is hard to
grasp, but understanding it helps us discover
principles that often generate these patterns."
设计模式总是容易理解的,只要想用,也总能用上的,若是问你它的好处,也总是能说上几条,可是是什么样的一个思维过程导致一个新的设计模式的产生? 作者发出这样的问题。在Avoid Repitition当中他也抛砖引玉,指出:避免重复是设计模式产生的驱动力之一。
说到这里,即使还不看作者具体的说明,我们大概就能想像出那些例子了:Visitor模式把数据结构的访问过程(遍历过程)这一部分会重复的代码提出来,Visitor只负责对单个结点的访问,这不就是代码的提取吗?面向接口编程,不也是这个理念的反映吗?当接口的实现不同时,调用接口者却是在用相同的逻辑在运行,不需为不同的接口实现单独另写代码?
你会说,这太简单了,我也知道要这样做。 但你想过这就是设计模式的驱动力之一吗?你有想过其它的驱动力吗?这些驱动力之间有没有矛盾呢?
我也没有完全想清楚这些问题,但是我觉得,很多时候我们迫不及待的使用设计模式或是在为设计具体采用什么策略而挣扎时,我们该问问自已:它是否有效的避免了重复代码,它是否足够的容易理解。
Avoid Repitition: martinfowler.com/ieeeSoftware/repetition.pdf
Separating User Interface Code: martinfowler.com/ieeeSoftware/separation.pdf
Reducing Coupling: martinfowler. com/ieeeSoftware/coupling.pdf
To Be Explicit: martinfowler.com/ieeeSoftware/explicit.pdf
觉得很好,不敢独享,拿出来分享。
大师讨论了一些软件设计模式背后的力量:
"We can learn from the specific
solutions they convey and
from the thinking process that leads to their
development. The thinking process is hard to
grasp, but understanding it helps us discover
principles that often generate these patterns."
设计模式总是容易理解的,只要想用,也总能用上的,若是问你它的好处,也总是能说上几条,可是是什么样的一个思维过程导致一个新的设计模式的产生? 作者发出这样的问题。在Avoid Repitition当中他也抛砖引玉,指出:避免重复是设计模式产生的驱动力之一。
说到这里,即使还不看作者具体的说明,我们大概就能想像出那些例子了:Visitor模式把数据结构的访问过程(遍历过程)这一部分会重复的代码提出来,Visitor只负责对单个结点的访问,这不就是代码的提取吗?面向接口编程,不也是这个理念的反映吗?当接口的实现不同时,调用接口者却是在用相同的逻辑在运行,不需为不同的接口实现单独另写代码?
你会说,这太简单了,我也知道要这样做。 但你想过这就是设计模式的驱动力之一吗?你有想过其它的驱动力吗?这些驱动力之间有没有矛盾呢?
我也没有完全想清楚这些问题,但是我觉得,很多时候我们迫不及待的使用设计模式或是在为设计具体采用什么策略而挣扎时,我们该问问自已:它是否有效的避免了重复代码,它是否足够的容易理解。