我目前正在阅读,{2}由Erich Gamma和其他人阅读。我决定做一些小项目,看看将设计模式应用到我写的软件的实际结果。
我应该对实施它们有多严格?我在互联网上看到了一些实现"Design Patterns:Elements of Reusable Object-Oriented Software"的例子,它们只是跳过了实现中的整个类/接口/方法。应该允许一个人做同样的事情,还是更好地严格执行以避免未来的问题,即预先支持功能?或者设计模式是不是被视为一切的答案,是否应该以适用于当前情况的方式应用,即特定于代码?
答案 0 :(得分:10)
没有银弹。设计模式是一种指导方针,是可重复使用设计的公式,过去曾为其他人工作,以实现常见问题的解决方案。但是,如果该模式的某些部分不必要地使您的软件复杂化,那么您使用它并不是完全必要的。
设计模式的目标是简化和简化您的设计。如果不这样做,则不值得使用。
其他人可能有不同意见。
答案 1 :(得分:3)
这就是为什么它们被称为模式而不是算法或接口。
它们是在应用程序中不断出现的设计的一般描述。每个实现都将专门针对它所使用的情况,尽管它的工作方式的整体模式将是相同的。
答案 2 :(得分:3)
对于您使用设计模式所做的任何事情,您应该能够问自己一个简单的问题:这如何使我的软件更好?要具体一点。如果您无法列出在特定情况下实施设计模式的具体优势,请不要理会;同样,如果你得到了模式的“要点”,你很可能能够实现对你的情况有用的部分。
“设计模式”一书在这里特别好用 - 它们列出了使用每种模式的具体优势,以及适当的详细案例,以及原因。
答案 3 :(得分:3)
除了Ian Varley的观点之外,“这如何让我的软件变得更好?”您可以从该语句中提取以下内容:“这是否会降低我软件的复杂性?”在设计软件和设计模式应该为此做出贡献时,管理复杂性是关键。
答案 4 :(得分:3)
几乎每个读过那本书的人都会成为“有模式的小男孩”综合症的牺牲品。您开始寻找将模式注入代码的方法,无论它们是否适合。最后,你冷静下来,意识到这本书与通信词汇一样,关于代码行也是如此。
这是一本很棒的书,一本经典书。如果您查看Java或C#SDK,您会看到两者都充满了示例(例如,Java RMI中的Proxy,java.io包中的Decorator,java.sql和JDBC中的Factory等)
但是我发现它们在开发过程中被发现时效果最好,而不是强行进入代码库。
答案 5 :(得分:2)
应该......预先支持功能吗?
这取决于您需要多长时间才能使用该功能,以及绝对肯定如何<完全确定您根本需要它,但通常答案是“否”:谷歌用于该术语{ {3}}
嗯,我的意思是设计模式的目的之一是可重用性,我可以在其他项目中重用代码。
我的政策和/或YAGNI政策倾向于:
如果我没有首先实现这些步骤,那么这两个步骤都会更快更轻松,而且以后不需要更改,我甚至都不需要这些功能。
答案 6 :(得分:1)
正如曾经在SO上指出的那样,using your brain是编写优秀软件的最佳方式。一切都取决于具体情况。