【发布时间】:2009-04-04 08:02:40
【问题描述】:
最近我接触到了设计模式这个概念,并且对它充满热情。你们能推荐一些资源来帮助我深入了解设计模式吗?
【问题讨论】:
-
学习设计模式的最好方法是做一个项目。这是一篇通过项目逐步解释设计模式的文章codeproject.com/Articles/1009532/…
标签: c# asp.net design-patterns
最近我接触到了设计模式这个概念,并且对它充满热情。你们能推荐一些资源来帮助我深入了解设计模式吗?
【问题讨论】:
标签: c# asp.net design-patterns
你知道,对我来说,最好的书之一是Head First Design Patterns。我个人喜欢他们用来交流材料的风格。
【讨论】:
Wikipedia,Gang of Four 书籍,如果您对 C# 实现特别感兴趣,这里有一个不错的站点 here。
【讨论】:
最好的书之一是(如上所述)Head First 系列,因为它提供了很好的类比和现实世界的例子。
还有其他不错的 Java 设计模式书籍。此外,专门研究该主题的网站(请参阅上面的帖子)
虽然四人帮这本书是我第一次读到这个主题,但我认为你应该避免它,尤其是在你刚开始的时候。当时这是参考,但今天有很多书籍可供您选择。
但是,我明确强调这一点...实践是最终的学习工具。在阅读了几本关于该主题的书籍后,我 100% 确信知道和理解这些模式。当我尝试实际实施其中一些时,我很快意识到我的知识主要是“理论”,而我的理解甚至还不够接近。对我的自我的巨大打击!
我开始测试和挑战我的同龄人,并很快了解到他们和我在同一条船上。我发现 99% 的程序员都声称知道模式,但真正经过测试时,只有大约 1/3 真正了解该主题。
我着手在一个或多个复杂系统中实现尽可能多的模式。我把理论付诸实践,我学到的是一座金矿。
我的经验中最具挑战性的一个方面是每个模式看起来都很简单。但有时将一堆模式联系在一起可能更具挑战性。
我鼓励你把理论付诸实践!
杰奇!
【讨论】:
四个design patterns book 的帮派是标准。如果你熟悉 C++,我推荐它。
Head first design patterns 也不错,尤其是如果您喜欢视觉辅助工具并希望感觉自己正在 50 年代的餐厅学习设计模式。示例是用 Java 编写的。
有时有多种方法可以在给定的编程语言中实现模式(例如,请参阅discussion of options for implementing the Singleton pattern in C#),因此可能值得一本书来简明扼要地描述常见模式,另一本书建议最好的实现方式用你最喜欢的语言。
【讨论】:
我经常引用这个网站:Design Patterns。它有一个很好的文章,包括所有流行的设计模式的免费示例。
【讨论】:
Head first design patterns 这本书很好读。
如果你想测试你的设计模式知识,这里是design patterns quiz
【讨论】:
真的,我认为学习它们的最好方法是深入理解你的语言(基于你的标签的 C#),然后真正致力于实现良好的关注点分离、低耦合和高内聚的目标。 I'd read and study Robert Martin's writings about SOLID principles.
然后(这是最重要的部分),在开发软件时尝试遵循这些原则。你会发现你开始做某些事情,然后它会打击你,“哦!那是策略模式。”这确实是“模式运动”所展示的......人们使用某种语言工作,试图实现良好的软件设计,会发现自己得到遵循某些通用模式的解决方案。
【讨论】:
我发现Design Patterns Explained 是一个很好的介绍性文字。 《四人帮》一书可供那些已经了解模式的人参考。
【讨论】:
Martin Fowler 的网站上有大量信息:http://martinfowler.com/articles.html。 他的书Patterns of Enterprise Application Architecture 也涵盖了大部分内容。
【讨论】:
对于那些使用 C# 的人,我发现 Design Patterns in C# 比 GoF 的书更容易阅读。这些示例当然是用 C# 编写的,并且与 Microsoft 对模式的命名有关。
【讨论】:
去年我购买并阅读了Judith Bishop 的C# 3.0 Design Patterns,我对此感到非常满意,此前我曾尝试在 C# 中通读 Go4 和设计模式。
这涵盖了标准模式集,按相似性分组,以增加复杂性,但也将它们与 C# 3.0 的语言特性联系起来,因此您可以从接口和抽象类的简单案例开始,然后向上移动扩展方法、泛型、匿名类型、函数等 - 学习两者的好方法。
所有内容均以易于阅读的格式呈现,包含大量真实示例和方便的源代码。
【讨论】: