【问题标题】:Poltergeist antipattern examplePoltergeist 反模式示例
【发布时间】:2012-10-09 14:09:50
【问题描述】:

我试图了解什么是 Poltergeist 反模式,以及它与命令或委托模式有何不同。 我读过:

http://en.wikipedia.org/wiki/Poltergeist_(computer_science) http://sourcemaking.com/antipatterns/poltergeists

但不明白其中的区别...

所以为了清楚起见,我想看看它的代码示例(我更喜欢 C# 或 Java 语言)。

有人有吗?

【问题讨论】:

  • 我目前正在阅读《反模式》一书,其中描述了此反模式。如果有人无法理解,我认为解释有问题,而我也无法理解。我没有看到短寿命对象的问题,事实上,“用方法对象替换方法”重构就是这样做的:它创建了一个实例短寿命的类。但他们有状态。也许 poltergeists 的问题在于它们是无状态的(例如,某些具有非静态方法的实用程序类)?但是仍然有使用(几乎)无状态类来实现多态行为的用例。
  • 我注意到我们的代码库中有一个类,想知道它是否可能是一个恶作剧者。它的名字是ImageFromBmp。它的构造函数将 $url 作为唯一参数,并且有一种有用的方法可以返回图像实例。
  • 有没有办法将此函数移到图像的类中?如果是这样,那么你可能有一个恶作剧。

标签: design-patterns anti-patterns


【解决方案1】:

维基百科用以下方式描述命令模式:

命令模式是一种行为设计模式,其中对象用于表示和封装以后调用方法所需的所有信息。一个组件可以向另一个特定组件发送命令,假设满足某些条件时,该命令将被触发。

这个概念很像函数式编程中的函子(函子基本上是一个黑盒子里的函数,参数等等)

恶作剧鬼是这样描述的:

poltergeist 是一个短暂的、典型的无状态对象,用于执行初始化或调用另一个类中的方法。

命令是通用的,必须能够包含足够的状态才能重用。闹鬼通常是有特殊目的的,它们的存在只是为了让一些椅子嘎嘎作响,在地下室制造出巨大的噪音,然后消失。 Poltergeists 通常用作帮助构造或初始化对象的拐杖,很少用于共享构造后的状态更改。

换句话说,是的,它们有点相似,但是 poltergeists 不灵活并且代表静态动作,而命令是通用的、可以重复使用的并且代表可配置的动作。

【讨论】:

  • 我试图想象创建某些类只是为了“帮助构造或初始化对象”的情况。它是像某些依赖项的存根还是像工厂一样创建以特定方式初始化的对象?
  • 就是这样,没有想象的需要一个。它们通常是由于程序员的误解而产生的,而且 [几乎] 从来没有真正的理由来拥有一个。
  • 这与在 MVC 架构中拥有 Controller 类有何不同?
【解决方案2】:

值对象,根据定义倾向于属于这一类。

http://en.wikipedia.org/wiki/Value_object

它们的存在是为了推动价值观,但不做任何事情。

【讨论】:

  • 想多解释一下吗?我认为这根本不是真的。所以我想我错过了一些东西:-)
  • “值对象不做任何事情” - 这是一个非常有力的声明:)。验证、格式化、转换、DSL 扩展、特定数据操作等。对 joda.Money 类做很多事情,例如好的和功能性的价值对象。
猜你喜欢
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 2011-02-06
  • 2010-11-29
  • 1970-01-01
相关资源
最近更新 更多