Dojo:所有对象都应该是有状态的吗?

时间:2014-07-07 15:53:04

标签: dojo

在dojo中,我发现将所有对象设置为有状态很方便。这是最佳做法还是反模式?

使所有对象成为有状态的原因:

  • 访问属性的一致界面:通过someObject.get("someProperty")someObject.set("someProperty", someValue)
  • 访问所有媒体资源
  • 方便的内置mixin构造函数。例如,可以实现这样的对象:

var objectInstance = new ObjectClass({
    someProperty: someValue,
    someOtherProperty: someOtherValue
});

不总是使用有状态的原因:

  • 通常我不需要Stateful的核心功能(状态变化通知)。
  • 有状态可能会增加我的代码的开销
  • 有状态可能意味着有理由在我的代码中查看属性(当他们真的不应该被监视时)

很明显,有时候使对象成为有状态是有意义的。如果你需要watch一个属性,那么使一个对象有状态是有意义的。我要问的问题是:“使所有对象有状态以获取有状态提供的语法糖是否合理?”。基本上有两种选择:

选项1 :让所有类都有状态,以获取有状态提供的语法糖。

选项2 :只允许有状态的成员应该进行观察。

1 个答案:

答案 0 :(得分:0)

根据我的经验,这是我的意见:

好像你已经回答了你的问题。我肯定会选择2。 根据您的应用程序大小,保持所有对象状态可能成为一个大问题 - 反模式。

  1. 将会看到您的代码的开发人员会认为您的bean即使不是
  2. 也是有意义的
  3. 内存不是我们现在的问题 - 大多数机器都有千兆字节或RAM,只有当你的应用程序在GC中达到标记阶段时才会出现问题,因为你的所有对象都将保存在内存中,我们的RAM使用率将是中/高(取决于客户端的功能),所以你可以在某些情况下看到freez屏幕,例如你会做一些高处理。
  4. 因此,仅在必要时才使用statefull对象。请记住,所有GC都像小的短寿命对象:)长寿命只会填充堆中的旧空间。