我已经阅读了约4-5本书有关设计模式的书籍,但是我仍然不觉得自己已经接近设计模式的中级水平了吗?
我应该如何学习设计模式?
有没有关于设计模式的好书?
我知道这只能凭经验来完成,但是必须有某种方法来掌握这些吗?
我已经阅读了约4-5本书有关设计模式的书籍,但是我仍然不觉得自己已经接近设计模式的中级水平了吗?
我应该如何学习设计模式?
有没有关于设计模式的好书?
我知道这只能凭经验来完成,但是必须有某种方法来掌握这些吗?
Answers:
最好的方法是开始使用它们进行编码。设计模式是一个很棒的概念,仅阅读它们就很难应用。在网上找到一些示例实现并围绕它们进行构建。
数据和对象工厂页面是一个很好的资源。它们介绍了这些模式,并为您提供了概念性和现实性的示例。他们的参考资料也很棒。
我读了三本书,但在阅读OReilly的Head First Design Patterns之前,仍然不太了解模式。这本书使我大开眼界,而且讲得很好。
我的两分钱就这么老的问题
有人已经提到过,练习和重构。我相信学习模式的正确顺序是这样的:
大多数人忽略1,许多人相信自己可以做到2,几乎每个人都直言不讳地提出3。
对我来说,提高软件技能的关键是学习TDD。这可能会花费很长时间且痛苦又缓慢,但是首先编写测试无疑会让您对代码有所考虑。如果一个班级需要太多样板或容易中断,您会很快注意到难闻的气味
TDD的主要好处是您不必担心重构代码,而迫使您编写高度独立且具有凝聚力的类。如果没有一套好的测试,那么触摸没有损坏的东西就太痛苦了。有了安全网,您将真正冒险进行代码的大幅更改。那是您可以真正开始从实践中学习的时刻。
现在到了必须阅读有关模式的书的地步,我认为,这完全是在浪费时间来进行过多的尝试。在注意到我做了类似的事情之后,我才真正很好地理解了模式,或者可以将其应用于现有代码。没有安全测试或重构的习惯,我会等到一个新项目。在全新项目中使用模式的问题是您看不到它们如何影响或更改工作代码。我只在将代码重构为其中一种后才了解一种软件模式,而从来没有在代码中引入新的软件模式。
Derek Banas制作了YouTube教程,介绍了我非常喜欢的设计模式:
http://www.youtube.com/playlist?list=PLF206E906175C7E07
他们的时间可能会短一些,但是他的时间安排和演讲方式使他们学习起来非常愉快。
练习,练习,练习。
您可以读到多年演奏大提琴的知识,但仍然无法向乐器鞠躬,也无法制作听起来像音乐的东西。
设计模式最好是公认的高级问题。仅当您具有必要的经验才能认识到它们有用时,这一点才有意义。认识到它们是有用的,这是件好事,但是除非您看到它们将适用或已经应用的情况,否则几乎不可能理解它们的真正价值。
当您识别他人代码中的设计模式,或在设计阶段发现与模式非常合适的问题时,它们就会变得有用。然后检查正式模式,检查问题,确定它们之间的差异,以及对模式和问题的解释。
确实与编码相同;K&R可能是C的“圣经”,但是要从头到尾地反复阅读它并不能提供一种实践经验。经验无可替代。
练习练习。我认为4到5本书甚至是过多的阅读练习,没有一定的练习量。我相信,做到这一点的最佳方法是开始使用这些模式来重构您当前的项目。或者,如果您没有正在从事的项目,则可以按照自己的方式做,然后尝试将其重构为模式。
如果您没有经历过他们解决的问题,就无法完全欣赏它们。并且请记住,它们不是灵丹妙药-您不需要记住它们,也很难立即应用它们。我的两分钱
问自己以下问题:
他们在做什么?
他们会解耦/耦合什么?
什么时候应该使用它们?
什么时候不应该使用它们?
缺少哪些语言功能会使其消失?
使用它会招致什么技术债务?
有没有更简单的方法来完成工作?
我发现很难理解或理解某些模式的好处,直到一个人理解了它们所解决的问题以及另一种(更糟糕的)问题的解决方式。
除了GOF和POSA书籍以外,我还没有真正阅读过书籍,因此无法给您其他建议。确实,您只需要了解问题域,我认为许多经验不足的开发人员可能无法欣赏模式的好处。这对他们来说是微不足道的。当人们不得不首先与较差的选择抗争时,拥抱,理解和欣赏好的解决方案就容易得多。
祝好运
给出了很多很好的例子。我想添加一个:
误用它们。您不需要故意这样做,当您尝试将其应用到最初的“设计模式”拟合中时就会发生。在这段时间内,您将看到的每个问题似乎都恰好适合一种设计模式。通常,由于某种原因,所有问题似乎都适合于相同的设计模式(Singelton是最主要的选择)。
然后您将应用该模式,它将很好。几个月后,您将需要更改代码中的某些内容,并发现使用该特定模式并不是那么聪明,因为您将自己编码成一个角落,并且需要再次进行重构。
当然,这并不是一个可以在21天内学习的答案,但是以我的经验,它最有可能使您对该问题有深刻的了解。
我领导了一些设计模式讨论小组(我们的网站),并且阅读了5到6种模式书籍。我建议从《 Head First设计模式》一书开始,然后参加或开始一个讨论小组。《 Head First》一开始可能看起来有点像Hasboro,但是大多数人在阅读一两章后都喜欢它。
使用出色的资源-Joshua Kereivisky的“设计模式学习指南”进行模式排序并帮助您的讨论组。根据经验,我建议对订购进行的一项更改是将策略放在首位。当今大多数开发人员都经历过某种关于工厂的好坏的经历,因此从工厂开始可能会引起很多关于模式的对话和困惑,这往往会导致人们专注于学习和学习模式的知识,这在当时非常重要首次见面。
我推荐HeadFirst DesignPattern。仅仅阅读本书还不够,在吸收了概念之后,您需要找出脑海中出现的许多问题的答案,并尝试找出可以在其中使用这些模式的实际应用程序。我也一样,开始问问题,即使那些问题看起来很愚蠢。
我不知道最好的书,但是纯粹主义者可能会说 设计模式:可重用的面向对象软件的元素”
就我个人而言,我喜欢Head First Design Patterns O'Reilly出版的。它以对话的声音吸引了我。阅读时,我同时查看了源代码,以了解它是否适用于我所阅读的内容。如果可以,我进行了重构。这就是我学习责任链的方法。
练习-练习-练习。
我学习设计模式的方法是编写许多非常糟糕的软件。我12岁那年,我不知道是好是坏。我只是写了很多意大利面条代码。在接下来的十年左右的时间里,我从错误中吸取了教训。我发现了行得通的东西,没有行事的。我独立地发明了大多数常见的设计模式,所以当我第一次听到什么是设计模式时,我很兴奋地了解到它们,然后非常失望,因为这只是我已经凭直觉知道的东西的名称的集合。(有关十年内自学C ++的笑话实际上不是笑话)
故事的寓意:编写大量代码。正如其他人所说的,练习,练习,练习。我认为,除非您了解您当前的设计为什么不好,并寻求一种更好的方法,否则您将不知道在何处应用各种设计模式。设计模式书应该为您提供完善的解决方案和与其他开发人员讨论的通用术语,而不是针对您不了解的问题的粘贴解决方案。
读取设计模式,对它们进行编码的想法并不能真正帮助IMO。阅读这些书时1.寻找特定设计模式可以解决的基本问题,从创建模式开始是您的最佳选择。2.我确信您过去已经编写了代码,分析您是否遇到了设计模式旨在提供解决方案的相同问题。3.尝试重新设计/重构代码,或者重新开始。
关于资源,您可以检查这些
1是快速入门,2将进行深入研究。.3将解释或应使您认为您在2中学到的东西适合企业软件。
我的2分钱
我认为研究设计模式也很困难。您必须了解有关OOP的更多信息以及中型到大型应用程序开发的一些经验。对我来说,我作为一组开发人员进行研究以进行讨论。我们遵循了《设计模式学习指南》,他们已经完成了模式研究。有C#和JavaScript开发人员联合在一起。对我来说,花哨的是C#开发人员使用JavaScript编写代码,而JavaScript开发人员对C#代码执行相同的操作。离开会议后,我还会在家研究和阅读几本书以进行审查。更好地理解和记忆的更好方法是在http://tech.wowkhmer.com/category/Design-Patterns.aspx中使用C#和JavaScript的示例进行博客撰写。
我建议在进入每种设计模式之前先了解模式的名称。另外,如果有人知道这个概念,请仅解释并举一个例子,不仅限于编程,还包括阅读领域。
例如:
工厂方法:
阅读世界:我只给$ 5,$ 10或$ 20的钱,它就会在不知道如何生产披萨的情况下把披萨送回去,我只是依靠投入的钱得到一个小,中或大的披萨,这样我就可以吃东西或做任何事情。
编程:客户端只需将参数值$ 5,$ 10或$ 20传递给工厂方法,它将返回Pizza对象。因此,客户端可以使用该对象而无需了解其处理方式。
我不确定这是否可以帮助您。这取决于参加会议的人员的知识水平。