有关设计模式速成课程的任何建议吗?

时间:2009-05-08 06:35:30

标签: design-patterns

我将为我公司的开发人员提供设计模式的速成课程(最近遇到一些可怕的代码后)。

我想要提出的最重要的事情之一就是它们可以在长期和短期内节省时间(他们确实这样做了!) - 因为这里的开发人员承受了相当长的时间压力。总而言之,我需要展示每天的好处 - 让他们早点回家的事情。

告诉他们这可能意味着更少的错误可能不会打到家。我需要的东西会沉入其中。

我可能会做三到四节,每节一小时。你们对触摸/做什么有任何建议吗?

8 个答案:

答案 0 :(得分:22)

Head First Design Patterns将是一个很好的起点。它涵盖了主流设计模式。

Refactoring to Patterns也可能是有意义的。

如果你不能为每个开发者买一本书,可以买一些,并将它们分散开来。

答案 1 :(得分:16)

我认为任何教育课程的良好开场幻灯片都是:

  1. 我们为什么来这里? (在哪里确定了对这门课程的需求?)
  2. 我希望学到什么?
  3. 谁应该参加这门课程? (目标学生,先决条件等是什么?)
  4. 我什么时候可以应用我所学到的知识?
  5. 对你的期望(参与,家庭作业,考试,参加的最低班级等)
  6. 对于设计模式,我可以期待几种可视化工具或“job aids”。

    我会遵循类似Elements of Reusable Object-Oriented Software书的结构:

    1. UML - 类图概述
    2. OOP - 抽象,封装,多态,继承
    3. 凝聚力和耦合
    4. 什么是设计模式? - 模式名称,问题,解决方案,后果
    5. 为什么设计模式难以学习?
    6. 为什么要使用设计模式?
    7. 如何选择设计模式?
    8. 如何使用设计模式?
    9. 使用示例涵盖各种GoF设计模式 - 在应用设计模式之前显示代码示例,以及Vince Hustonexamples {{}}}中的效果。
    10. 结论
    11. 如前所述,设计模式确实是创意,所以在教学时你必须传达这个想法。如果他们理解设计模式的问题,解决方案和后果,那么他们将比试图强制模式进入代码要好得多(这将成为一场噩梦)。识别可以应用的位置和模式(如果有的话)是真正的目标。 Huston示例非常适合于向类中提供代码示例,并查看它们是否可以识别模式以改进它。希望这会有所帮助。

      Head First Design Patterns也是一个很好的参考。

答案 2 :(得分:7)

首先很难学习模式。我当时经常阅读the GoF book。每年都有另一种模式沉入我的脑海。所以我唯一的建议是你最多选择两种模式,然后进入很多例子来解决它。

复合材料是每个人都知道的东西。在此,您可以解释,知道它具有可以使用和通信的名称可能很重要。模式中的重要之处在于,它可以让其他人轻松识别您的意图。而这些小名字非常有用。

我个人发现模板方法模式在基于OO的开发中非常有用。它与OOP的发生方式非常接近,它可能也有改进编码风格的好处。

答案 3 :(得分:7)

大多数书籍解释模式的方法与我希望看到的完全相反。他们采取一种模式,描述前提条件,然后是什么,然后给你一个例子。我宁愿采取具体问题,并讨论替代方案。突出的那个,那就是'模式' - 只有这样才能引入它。

选择a)简单的模式,b)最有可能在代码中使用的模式。单身人士易于学习(因为他们不涉及科目/对象)。另一个有趣的是观察者模式。

答案 4 :(得分:5)

对于课程提供者,您处于一个独特的位置:您了解开发人员并了解他们正在使用的代码。

一种可能的方法是查看一些可怕的代码,并按照“我们怎样才能改进这一点?一如既往,有一种名为Observer的设计模式......”

这最终可能会混合design patternsrefactoring。但这可能是合适的,因为您正试图联系现有代码库的开发人员。

答案 5 :(得分:4)

学习模式的问题是你必须有足够的软件经验才能看到你编写或维护的代码中的模式(通常是未命名的)。如果你从未写过观察者,那么阅读模式的描述就不容易了。

我不是说你不应该阅读有关模式的内容。但请注意,一个人欣赏模式的能力受到一个人缺乏经验的限制。

模式的另一个问题,以及您将遇到的问题是它们不存在。至少它们存在甚至更少“软件”存在。模式是想法和概念。它们不是可运行的代码。可运行代码可以实现模式,但反过来不存在。你不能只在代码中键入“singleton”,突然出现单例。没有语言添加“访问者”属性突然使所有粘合剂实现访问者模式。有各种语言的模式的最佳实践和示例,但它们不是你可以粘在图书馆中而只是打电话的。

因此,您真正想要做的是教授一些最佳实践,其中这些实践的核心涉及识别和使用模式。观察是一种非常难以教授的技能(用于所有形式的观察)。

模式的第三个问题是它们实际上不是编码器的领域。出于某种原因,它们被正式称为设计模式。它们是最恰当的设计时间结构。当然,您可以使用模式来帮助重构现有代码。但总的来说,设计模式是简化设计讨论的术语。这也是为什么没有任何单例代码库的原因。使用单例是一种代码方法,而不是代码本身。

所有这一切,试图教育你的程序员关于设计模式不会受到伤害。让程序员思考是一件好事,如果只有其中一人离开它而不仅仅是对模式的表面理解,那么你可能会先走出游戏。祝你好运。

答案 6 :(得分:2)

查看此网站:http://www.dofactory.com/Patterns/Patterns.aspx 它侧重于许多类型的创造,结构和行为模式,并提供结构,现实世界和.net优化代码的示例。希望这有帮助

答案 7 :(得分:2)

以下是Nettuts +的教程:A Beginner’s Guide to Design Patterns

很容易理解。适合初始设计模式。

本教程清楚地解释了:

  
      
  • 为什么设计模式很重要
  •   
  • 何时以及为何应该使用
  •   
  • 为PHP提供了每个模式的示例
  •   

教程中解释了以下设计模式:

  
      
  • 策略模式
  •   
  • 适配器模式
  •   
  • 工厂方法模式
  •   
  • 装饰图案
  •   
  • 单身人士模式
  •