使用嵌入式类对相关属性进行分组

时间:2013-05-29 04:42:42

标签: oop design-patterns

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

使用嵌入式类对此人的类似属性进行分组是否合适?

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

如果我创建了一个名为PersonPhysicalAttibutes的具有这些属性的类,那么如果我不直接将这些属性挂在人身上呢?

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

personA.PhysicalAttributes.Height = 6.1;

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

编辑:

其中一个答案提到了在单独的类中分组地址属性。我同意这是一个单独的课程运作良好的情况。地址类也可以在雇主,客户或供应商类中重复使用。

但是我选择物理属性作为一个例子是有原因的。我的问题是,当你有理由确定该类不会在任何其他环境中使用时,将它们分解为另一个类是否有意义?严格意义上的智能感知/分组。

3 个答案:

答案 0 :(得分:1)

取决于具体情况。如果你有一组属性,使得所有属性或大多数属性一起变化(简而言之,属性本身具有强绑定),那么将它们移动到另一个类中是合适的。例如,一个人的地址包含houseNo,street,city,zipcode。这些属性表示可以与Person关联的组,但可以作为一个组一起存在。因此将它们包含在Person类中是不合适的。相反,你应该为他们创建一个名为Address的不同类,并将Address与Person关联。但是重量,eyeColor,hairColor,身高都是独立的属性。当然,他们不会组成一个团体。它们最好与Person类保持关联,作为独立的独立属性。如果您强行创建一个类似于您提到的物理属性的子组,您将经常遇到违反Demeter法则的情况。

答案 1 :(得分:0)

这会违反Law of Demeter。特别是,通过这种方式设计,您实际上将调用代码耦合到Person类您的PersonPhysicalAttributes类,从而使以后更难以更改代码。

我个人会避免这样做。

答案 2 :(得分:0)

不仅合适,还希望将大班分成较小的班级。但是,请考虑您的命名。组成像

这样的对象的人是最明智的
Physique { Height, Weight, ... }
Face { EyeColor, HairColor, ... }
Psyche { Iq, Mood, ... }