7

有时对象由纯数据组成。此类对象具有字段、访问器,并且几乎没有其他方法。

有时对象由纯粹的行为组成。它们有其他对象来表示它们的状态,或者数据作为方法参数传递。通常这样的对象代表算法或某种策略。

您更喜欢哪种状态/行为比率?
什么更可维护?
什么更容易出错?

4

4 回答 4

2

我喜欢做一个或另一个的对象——要么代表具有行为的东西(理想情况下,只公开 void 方法),要么代表纯状态(理想情况下,是不可变的,除了维护其状态和可能的验证之外没有代码)。

第一种类型的对象相互传递另一种类型。这与 Actor 模型非常接近,这样做可以解决很多问题。(如果在 Java/C# 中执行此操作,您可以将接口作为“值”传递给第一种类型。)

我发现你遇到问题的是中间的对象(状态和行为)......行为对象中的某些状态是可以的,只要它的主要目的不是被查询

于 2009-08-26T06:55:12.077 回答
2

如果您正在设计的对象都是行为而没有状态或所有状态且没有行为,我认为您的设计存在缺陷。在现实世界中遇到这类对象真的不常见,如果这些不是您描述的补充对象而是现实世界对象的表示,那么我认为某处有问题。

我没有任何状态/行为的固定比率。我认为每个物体都有自己的形状,这在物体之间可能会有很大的不同。但我认为随着时间的推移,如果你经常处理对象,动词往往会比名词/形容词更多,即行为将主导状态。

这就是我在我的程序中观察到的。

于 2009-08-26T07:01:59.630 回答
1

我喜欢以下对象(按优先级排序):

  1. 有关于如何使用它们的详细说明,这样您就不会进入无效状态。
    • 调用方法时,如果异常状态不正确,则抛出异常。
    • 拥有允许您在调用方法之前断言它们处于正确状态的方法。

当这些措施到位时,就很难把事情搞砸了。

没有行为的对象也可以是哈希表,没有状态的对象也可以是函数的集合。

于 2009-08-26T06:36:40.040 回答
0

只有当行为是通用的并且可以应用于不同类的对象时,它才应该作为一个单独的类来实现。如果是这种情况,您将无法选择“比率” - 它仅取决于特定系统中通用策略的数量。

否则,就会出现过早泛化的情况,甚至更糟糕的是,无端违反 OO 原则。是的,它很容易出错。

于 2009-08-26T07:10:27.960 回答