【发布时间】:2010-09-11 10:21:24
【问题描述】:
【问题讨论】:
标签: design-patterns
【问题讨论】:
标签: design-patterns
仅崩溃软件: http://www.usenix.org/events/hotos03/tech/full_papers/candea/candea_html/ 摘要
仅崩溃程序可以安全崩溃并快速恢复。只有一种方法可以阻止此类软件——通过使其崩溃——并且只有一种方法可以启动它——通过启动恢复。仅崩溃系统是从仅崩溃组件构建的,并且使用透明组件级重试可隐藏最终用户的系统内组件崩溃。在本文中,我们提倡互联网系统的仅崩溃设计,表明它可以导致更可靠、可预测的代码和更快、更有效的恢复。我们提出了有关如何构建此类仅崩溃的 Internet 服务的想法,将成功的技术发挥到逻辑上的极致。
【讨论】:
这更像是一种反模式,但我已经看到了我所说的“将所有内容保存在一个地方”的模式。这是一个大型应用程序,其中所有非本地变量,对于每个类,每个类,都存储在一个名为 P(用于参数)的类中。顺便说一句,所有静态变量都保存在一个名为...等待它的类中...S。
不管怎样,这个项目变得相当大,突然之间,没有任何效果。 (我是在这个时候被录用的)。令人惊讶的是,该程序并没有崩溃,它只是有大量的副作用,使应用程序运行起来很糟糕。可以想象,多个线程都访问 P 和修改变量,没有锁定或同步。
我告诉你,这真是一个值得一看的景象。
公司开设了一个新办公室,并聘请了 3 个人来为其工作,我就是其中之一。我们得到了程序并被告知要修复它。我们花了几天时间坐在周围只是拍拍我们的额头。我现在脸上有一个永久性的掌纹。
其他有趣的...变量名为“fudgeFactor”。还是不知道那是怎么回事。
获取下一个ASCII字符的方法...
char getNextChar(char previous) {
switch (previous)
case 'a': return b;
case 'b': return c;
...
case 'z': return a;
}
不管怎样,这就是我的有趣模式……加上一些额外的有趣的一面。
【讨论】:
去年我一直在维护一个用 LANSA 编写的 Windows 应用程序,其中的焦点是通过将所有控件设置为 tabStop = false 来管理的,除了两个隐藏按钮(PrevFocus 和 NextFocus)。加载表单时,焦点被设置到一个字段,并且该字段的名称存储在跟踪变量中(恰当地命名为“FocusField”)。当用户使用 tabs(或 shift-tabs)改变焦点时,相应按钮的 GotFocus 事件就会运行。该函数内部是一个案例语句(选择案例 FocusField)。根据当前关注的字段,运行验证逻辑,并可能将焦点更改为另一个字段。
大多数控件的 GotFocus 事件会查看 FocusField 的当前值,然后调用 LostFocus 函数,该函数对 FocusField 执行相同的 case 语句,以便验证先前聚焦的字段。
正如您可能猜到的那样,这使得将 UI 与逻辑分开是不可能的,并且维护起来令人难以置信。重写这些表单以使用简单的 Validate 方法来验证所有输入并让正常的选项卡属性(TabOrder、TabStop 等)发挥作用,这通常会导致代码减少 50% 并大大提高表单的可靠性。
我不知道这种模式起源于何处,尽管它可能是由 RPG/绿屏程序员转为 WinForms 开发人员编写应用程序的梦想。
【讨论】:
在处理大量图形程序时,访问者第一次吸引了我,作为对复杂结构进行操作的一种非常优雅的方式。
除了 mvc(它本身不是模式)之外,就其复杂性和解决问题的潜力而言,这是“模式之王”。
【讨论】:
Fowler 的Fluent Interface 是一个非常有趣的模式。我也一直对抽象工厂、策略和状态模式情有独钟。
如果可以的话,我最近编写了一个我称之为Friend Class Pattern 的“模式”,有些人可能会觉得它对限制没有 C++ 风格友元类的语言中私有字段访问器的可见性很有趣或有用。
【讨论】:
与其说是一种模式,不如说是依赖注入和控制反转
【讨论】:
我记得当我第一次在 GOF 中读到 flyweight pattern 时。他们使用的例子是文字处理器;他们指出了使用独立对象来表示每个角色的缺点。享元模式鼓励将可共享的、内在的、不可变的状态与不可共享的、外在的、可变的状态分开。对我来说,当时,它是那些“啊哈!”之一。这些时刻真正拓宽了我的视野,并影响了我的设计至今。
我的一个朋友建议策略模式本质上是祖先模式。许多其他模式(桥接、装饰器、代理、状态等)只是策略的更精细应用。我记得我和他争论了很长时间,战略和状态之间确实存在差异。
【讨论】:
不,那是关于 DP 书籍的,而这个线程是关于特定模式的。
Interpreter 和 Flyweight 是从 Gang of 4 书中想到的。
我认为 sw 开发人员工具箱中的 Bridge 和 Mediator 是强大而深入的模式。
【讨论】:
您将遇到的最有趣的设计模式是您自己创建的,原因很明显。
这并不是说它将是最好的设计模式,只是最有趣的。
【讨论】: