假设我正在设计一个Person类。
使用嵌入式类对此人的类似属性进行分组是否合适?
例如,让一个人有体重,身高,头发颜色和眼睛颜色。
如果我创建了一个名为PersonPhysicalAttibutes的具有这些属性的类,那么如果我不直接将这些属性挂在人身上呢?
所以当你需要设定一个人的身高时,你会使用
personA.PhysicalAttributes.Height = 6.1;
你会说这是一个可行的设计吗?
编辑:
其中一个答案提到了在单独的类中分组地址属性。我同意这是一个单独的课程运作良好的情况。地址类也可以在雇主,客户或供应商类中重复使用。
但是我选择物理属性作为一个例子是有原因的。我的问题是,当你有理由确定该类不会在任何其他环境中使用时,将它们分解为另一个类是否有意义?严格意义上的智能感知/分组。
答案 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, ... }