devise模式 – build筑宇航员

也许我的问题在本质上与这个问题类似: 你使用devise模式吗?

我写的程序是小型的50-75 K线程序,主要使用Windows窗体和ASP.NET 。 这些程序是GUI密集型的,允许各种graphics和graphics处理的devise和布局。

我认为自己擅长面向对象,并在平衡面向对象和传统的程序方法的基础上创build可维护的代码。

问题出现在我考虑devise模式的时候。 链接到线程有一个有趣的评论,devise模式可能会被使用,但不是故意的。 当我想故意使用一种devise模式(在我的程序devise中),感觉就像我超越了所需要的那样,我正处于“ 架构宇航员 ”的领域,所以我回到我的传统的方法和一切顺利进行(即通常)。

以MVC模式为例。 如果我想使用Windows窗体或ASP.NET(Visual Studio 2005)来实现这个模式,那么我必须编写一个“框架”,编写框架似乎比应用程序的大小更加麻烦。

也许我的应用程序太小,没有理由使用这些模式。 也许我只是不了解模式,或者需要更多的研究。

有没有其他人体验过这种“架构宇航员”的感觉?

你如何有意地使用devise模式而不会“过度”?

当涉及到这种性质的小型应用程序时,我通常比devise模式更担心反模式。 也就是说,这实际上是同一个硬币的两面:对于我来说,devise模式的力量正在熟悉它们,以便认识到我所想的任何解决scheme的不太明显的优点和缺点。 我很less从事实际上完全实现一个完整的devise模式(除非我真的需要所有的function); 然而,我经常通过认识到自己正在经历的path,并且看到该解决scheme的常见缺陷或缺点,经常为自己未来的工作节省了很多,然后我可以检查未来的用途,看看它是否会一个相关的问题,我或不。 因此,devise模式的强大之处在于,您可以轻松地预测当前解决scheme的未来后果,以满足您的潜在需求,而不用担心您可能会遗漏一些您没有考虑的不太明显的警告或特殊情况。

“你怎么故意使用devise模式而不去”过度“?”

简单。

  1. 不要将MVC框架开发工作与模式混为一谈。

  2. 认识到你做的每件事都是以前做过的(由你或其他人完成)。

  3. 当你重复一些事情 – 任何事情 – 你正在遵循一个模式。

  4. 当你为任何事物重复devise – 无论多小 – 你都在遵循一个devise模式。

  5. 当你注意到自己重复某件事情时,给你重复的事情分配一个名字。 看,你已经发现并命名你的第一个devise模式。 无论多小。

  6. 当你命名一个devise模式时,你可以考虑一下你使用它的时间,为什么要使用它,它解决了什么以及使用它的后果是什么。 无论多小。

  7. 涉及“重复devise元素”的每一个学习都是devise模式。 无论多小。

每个循环。 每个if语句。 每个对话框。 每个文件都打开。 这些都是devise模式。

大多数是语言的一部分,并且具有明显的语言特定的名称。 “如果”,“打开”等

一些devise模式比单个语句大,但比整个MVC框架小。 那些是有趣的。 了解这些。 买一本书。 阅读。 MVC不会出现在大多数的devise模式书籍中,因为 – 太好了 – 太复杂,太难应用了。

不要从MVC开始。 开始与其他任何事情。

“build筑宇航员”是那些花很多时间讨论devise的人,但实际上并没有发生。

我喜欢“重构模式”一书中提出的devise模式的方法。 在这里,模式并不是我们在前期投入的东西,而是我们在减less代码复杂度之后才做的事情。 因为这种方法需要function性代码开始,并select基于更容易扩展代码以满足特定需求的重构,所以其重点在于非常多的结果。

MVC本身并不需要你编写任何框架。 它只是意味着你的视图,控制器和模型代码分开。 我使用MVC(或MVP)甚至是简单的移动应用程序,因为我发现在编写testing(更不用说改变UI)时,控件的分离非常有利。

我的猜测是你现在不做很多的unit testing或者集成testing,所以这个分类对于你的代码的质量和可读性有多大帮助并不明显。

我强烈build议你阅读Fowler关于UI架构的报道 。

几乎任何适当的devise模式,应用时,应该导致简化。 如果你把事情做得更复杂,你可能会针对你的具体问题朝错误的方向发展。

不要忘记沟通 – 众所周知的devise模式可以让你用几句话来交stream一些复杂的东西。 当你说“使用观察者模式发送通知”时,每个人都知道你的意思。

很less有项目需要或从超结构中受益。 大多数以这种方式开始的项目从未完成。 许多这样做往往很难扩展或维持(尽pipe他们有相反的要求)。 请记住语言和技术的发展速度。 当你完成一个非常大的项目时,今天最新最酷的东西可能已经过时了。 模式是有趣的,可以给你一些洞见,如何优雅地解决问题,但大多数时候,在现实世界中,没有优雅的解决scheme。 我曾经在那里工作过的地方有一位超级明星宇航员,在编写垃圾代码的时候给我留下深刻的印象,这些垃圾代码我稍后要修复。 最终的结果是最重要的。 你的公司需要一个工作中的应用程序,而不是一个无休止的工作,即使他们自己没有意识到。

这些模式就像是一般问题的抽象解决scheme。 如果有人知道这些模式,那么他们就更有可能更快地应用一个已知的解决scheme,而不是坐在思维周围,“哎呀,我想知道如何做这个工作。”

关于框架:如果你曾经工作过一个不止一个人的团队(这听起来不像是你的项目规模很小),框架可以帮助每个人都做同样的事情,这就是重要的是在可维护性的团队努力,并迅速让新人们赶上。

简单的问题往往需要简单的解决scheme,尽pipe一些难题很简单。 另一方面,复杂的问题可以用有组织的方式或通过肮脏的意大利面代码来解决。 许多人试图组织软件devise,一些“模式”出现并得名。

我认为模式在将devise意图传达给其他人时是有用的词汇,但并不是将它推到devise中。 当您根据需要将代码解耦合时,可以根据需要应用模式。 例如,当您发现自己构造非常复杂的构造函数时,会放入构build器模式。

将数据层和UI层从您的业务逻辑中解耦到我这件事上,您应该尽可能做好devise。 同样,低耦合, 干燥和可维护的代码应该是目标,而不是模式。

对我来说,这取决于:

  • 应用程序的大小,
  • 要使用的devise模式,
  • 我不得不在build筑上投入大量的时间。

在一个小应用程序中,我很less使用任何不能自然stream动的devise模式,除非它们在扩展或维护应用程序的范围内具有很高的投资回报率。

你正在一个大公司为你devise模式的环境中工作,我认为这解释了你的感受。 你可能是对的。 我们这些在开放环境中使用FOSS语言来解决更广泛的问题的select是无穷无尽的,阅读devise模式有助于我们做出有关架构的明智决策。 通常这意味着select正确的库。 您所select的狭窄领域的select已经为您做好了。

恕我直言,人需要有:

  1. 充分了解您可以使用的不同devise模式的优缺点
  2. 明确你的应用程序的devise目的,并确保模式的优点被用于你的优势。

以MVC模式为例。 如果我想使用WinForms或ASP.NET(VS 2005)来实现这种模式,那么我必须编写一个“框架”,编写框架似乎比应用程序的大小更为麻烦。

你的networking应用程序是否需要有效的SEO 在ASP.NET中实现的MVC模式可以在这方面提供帮助。 以SOurl为例。 他们对search引擎的优化主要是因为ASP.NET的MVC模式实现支持它,并且已经在SOdevise/开发中得到了有效的使用。