我应该完全熟悉哪些设计模式?什么是每个可用于的一个简单示例?
我是一名网络开发人员(我使用Django,熟悉逻辑分离),但我在一家桌面应用公司工作。他们总是谈论单身人士,我忘了......但这让我毫无头绪!
答案 0 :(得分:11)
答案 1 :(得分:10)
忘记单身人士。这很混乱,很少有必要。
了解状态,策略和命令。它们一直在使用。
状态是指具有依赖于对象状态的逻辑的任何东西。简而言之,通过 State 可能更好地完成每个if语句。认真。过多的if语句都是代码味道,表明存在遍布整个地方的有状态处理。
策略适用于任何“插件”或“扩展”或“选项”处理。
命令适用于任何可扩展(可组合)的操作集。备份,还原。表删除,创建,索引,填充。验证,加载,汇总,报告。任何可以以不同方式,不同顺序等组合在一起的类似命令的东西都应该使用正式的 Command 设计来完成。
答案 2 :(得分:2)
老实说,模式很重要但知道何时使用它们同样重要。永远不会有任何固定答案,这是你需要为自己感受到的东西。那些争论它的人是绝对的,你应该总是使用它们或总是不使用它们是不正确的。设计模式是一种工具。我建议在Amazon.com上查找一本书,其中包含您正在编写的任何语言,专门涉及设计模式。我知道有一篇为Ruby on Rails编写的内容虽然我不记得这个名字很棒,但是还有一个名为Head First Design Patterns的Java,以及Bob和Micah Martin编写的C#。阅读适用于您最熟悉的语言的那一个。即使您不使用所有模式,也可以了解它们的工作方式以及何时使用它们。
答案 3 :(得分:1)
在了解为什么它们是针对特定问题的最佳策略之前,了解设计模式将不会有多大用处。从一开始就学习设计模式可能很好,除非你错过了解决这个问题的所有“错误”方法,这反过来意味着你可能会错过何时使用给定模式以及何时不使用它的细微差别
唯一比那些坚持旧方式并且不打算学习正确方法的人更糟糕的是,那些学习正确方法并且不费心学习为什么这样做的人才是正确的。并且他们继续将它应用于不应该应用的东西,因为他们只是不知道更好。
所以我的观点是,如果你是网络开发的新手,不要太过于陷入设计模式炒作(虽然这是一个很好的炒作)。通过自己做事来学习。当您达到某个级别时,请阅读设计模式并了解它们可以应用于哪些方面以使您的代码更好。
这就是你正确学习它们的方法。不喜欢在你走路之前被迫跑步。
答案 4 :(得分:1)
对于Web应用程序,至少在初级阶段理解企业应用程序架构模式中描述的模式对我来说是有价值的。 Gang of Four模式也值得了解。
但我认为你根本不需要百科知识的模式来开始。粗略的理解将帮助您了解当您开始遇到想法/业务问题与代码之间的摩擦时的位置。我有几个周末旅行,让我完整地翻阅这两本书,但我仍然发现模式部分中的详细信息作为参考而不是作为背景知识更有用。
阅读GoF或PoEAA的“第1部分”部分将帮助您远远超过深入学习三到四种模式,因为当您遇到他们描述的问题时,您将知道在哪里看。您可以查看他们在线描述的大多数模式的详细信息。
我在Web开发中直接或间接使用的GoF模式,通常是无意识的,包括:Observer,Command,Composite,State,Strategy。除了作为日志记录和服务定位器/依赖注入工具的客户端之外,我通常不使用Singleton。我经常使用的PoEAA模式,通常是无意识的,或偶然作为我正在使用的数据访问策略或Web框架的一部分,是Active Record,Application Controller,Data Mapper,Domain Model,Gateway,Lazy Load,Layer Supertype,Page控制器,模板视图和值对象。那并非详尽无遗;这些只是少数人想到的。
大多数这些可能是通过从一个自以为是的Web开发框架(如Rails,Django或Castle Monorail)开始,而不是在摘要中学习。毕竟,模式被识别并从成千上万的成功的应用程序开发经验中提取出来,而不是发明,然后粘在上面,因为它们听起来很聪明。
很容易因为在一两种模式上获得的表面上的知识过于兴奋,然后看到“仅钉子”,因为你很快就看到了每一个问题,并试图将一个不合适的模式变成一个解决方案,因为你明白它是如何运作的。
所以,学习模式,是的;对所有常用动机的动机进行肤浅的概述,但是在你理解一些任意列表之前,不要觉得你必须等待编写严肃的代码。
答案 5 :(得分:0)
MVVM是我见过的与Silverlight一起使用的新版本。它有点多,但似乎有效。