2

假设我正在设计一个 Person 类。

使用嵌入式类来分组此人的相似属性是否合适?

例如,假设一个人有体重、身高、头发颜色和眼睛颜色。

如果我创建一个名为 PersonPhysicalAttibutes 的具有这些属性的类,而不是将这些属性直接挂在人身上。

所以当你需要设置一个人的身高时,你会使用

personA.PhysicalAttributes.Height = 6.1;

你会说这是一个可行的设计吗?

编辑:

其中一个答案提到在单独的类中对地址属性进行分组。我同意这是一个单独的班级运作良好的情况。地址类也可以在雇主、客户或供应商类中重用。

但是,出于某种原因,我选择物理属性作为示例。我的问题是,当您有理由确定该类不会在任何其他上下文中使用时,将它们分成另一个类是否有意义?严格来说是为了便于智能感知/分组。

4

3 回答 3

1

这取决于具体情况。如果您有一组属性,它们全部或大多数一起更改(简而言之,属性本身具有很强的绑定),那么将它们移动到另一个类中是合适的。例如,一个人的地址包含 houseNo、street、city、zipcode。这些属性表示一个可以与 Person 关联的组,但可以作为一个组一起存在。因此,将它们包含在 Person 类中是不合适的。相反,您应该为它们创建一个不同的类,称为 Address 并将 Address 与 Person 相关联。但是 weight、eyeColor、hairColor、height 都是独立的属性。他们自然不会一起组成一个群体。最好将它们作为单独的、独立的属性与 Person 类保持关联。

于 2013-05-29T09:04:19.277 回答
0

不仅合适,还希望将大类拆分为小类。但是,请考虑您的命名。将 Person 组合成类似的对象是最明智的

Physique { Height, Weight, ... }
Face { EyeColor, HairColor, ... }
Psyche { Iq, Mood, ... }
于 2013-05-29T07:48:55.493 回答
0

这将违反得墨忒耳法则。特别是,通过这种方式设计,您实际上将调用代码耦合到您的 Person 类您的 PersonPhysicalAttributes 类,从而使以后对代码的更改更加困难。

我个人会避免使用这种方法。

于 2013-05-29T04:48:42.330 回答