2011-03-09 43 views
12

罗恩杰弗里斯说:“当你真正需要它们的时候总是要实施,而不是当你预见到你需要它们时”。XP与使用设计模式有冲突吗?

然而,如果我在编程一个子系统,比如说C#,那么我会花很多时间考虑我的面向对象设计,并实施伟大的模式作为策略模式来封装“可能”会改变的事物在将来。

做这两种立场的冲突,以及如何取得平衡?

回答

3

我的选择一直是,如果它是有道理的,现在选择的设计模式。如果需求指定将有3种方法来处理数据,那么我可以选择策略,如果他们指定将有一种方法,那么除非我有充分的理由相信稍后会添加更多内容,否则我可能不会打扰在将来。这完全不与XP冲突:选择一个现在有意义的实现,如果代码不接受该实现,则重构需要更改的部分以接受所需的实现。

1

我的建议是更进一步,但不是两个。

假设您需要为管理100篇文章的杂志编写软件。基于作者姓名查找文章的软件功能之一。由于只有100篇文章,因此使用地图或哈希值是没有意义的;只是循环所有杂志并比较作者。

然而,有一个很大的机会,你的软件将用于下一年度管理1000条,或10000,或1万篇文章,然后你可能需要一个地图或哈希。那么为什么不在这一刻映射/散列关于作者名字的文章呢?这就是我进一步向前看的意思。

理论上你的应用程序也可以使用基于内容的词来查找文章。您可以添加N-gram功能和单词别名以进行模糊搜索,等等。但是如果目前没有使用这个功能,为什么要实现它?这就是我的意思,不要再看两步。

从理论上讲,看一步或两步进一步的区别,可能很难做出,并可能会依赖于你的应用程序,你的工作在同行业中,你的软件是如何被商业化的类型.. 。

任何方式,用你的想象力,但不要把它太远。

3

重构的设计模式。在你需要的时候不要一路走下去。

+1

通过Joshua Kerievsky获取书籍* Refactoring to Patterns *,其中他描述了如何根据需要安全地重构*以*或*离开*特定模式。 – 2011-05-02 20:49:25

1

:像战略模式引入只是抽象出来的东西,可能会改变冲突与罗恩的“你是不是要去需要它”

设计模式给你的,你可以使用机制的词汇,但如果你在做XP,你会一步一步地实现 - 即使你有理由相信你会需要一些模式。

有时候我们会从头脑中开始,发现逐步工作并不能达到我们的想法,并最终得到更好的不同设计。模式只应该是一个指导。

我可以强烈推荐Steve Freeman和Nat Pryce撰写的“成长软件指导测试”,作为一本关于如何做到这一点的好书。