课堂设计问题

soo*_*ise 4 c# class-design

假设我想制作一个HumanBody类.我想存储每个肢体的长度.

HumanBody.LeftArmLength = 14;
HumanBody.RightArmLength = 14.1;
HumanBody.LeftLegLength = 32;
HumanBody.RightLegLength = 31.9;
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但似乎做一些事情会更好:

HumanBody.Arm.Left.Length = 14;
HumanBody.Arm.Right.Length = 14.1;
HumanBody.Leg.Left.Length = 32;
Humanbody.Leg.Right.Length = 31.9;
Run Code Online (Sandbox Code Playgroud)

所以这将涉及制作子类.我正在描述被认为是"良好实践"的东西吗?看起来这是一种更有条理的存储数据的方式.

编辑:这个例子非常简单,但如果要存储100个不同的数据,这似乎是一个更好的方法.

Mit*_*eat 10

左臂和右臂是Arm的实例,所以可能:

HumanBody.LeftArm.Length = 14; 
HumanBody.RightArm.Length = 14.1; 
HumanBody.LeftLeg.Length = 32; 
Humanbody.RightLeg.Length = 31.9; 
Run Code Online (Sandbox Code Playgroud)

据推测,你需要考虑有人可能没有双臂或双腿的情况.

[注意:正如评论中所指出的,理想情况下,这些应该在构造函数中设置,而不是使用属性.这是一般原则:以连贯,可用的状态构造对象.

  • 嗯,你有这个:`public void Torture(HumanBody person){person.Arm.Left.Length ++; person.Arm.Right.Length ++; ...}对于一个拉伸工作台(我不知道那种东西的正确的英文单词) (7认同)
  • 我要发一个答案,但是我只想给你添加一个附录.*我希望你不能动态指定我的手臂长度.你最好使用某种构造函数.* (2认同)

Jon*_*eet 8

这取决于实际情况.这里似乎没有是远点在两臂组合在一起和两条腿一起......"一对臂"的概念通常不是有用的.

另一方面,如果您正在讨论将"DeliveryAddress1","DeliveryAddress2","DeliveryTown","DeliveryZipCode","BillingAddress1","BillingAddress2","BillingTown"和"BillingZipCode"分组到一个Address类的两个实例中,那是另一回事.

基本上,各个部分是否属于自然分组?这个组是否可能需要以复合方式处理?你能看到自己将小组传递给其他一些代码吗?如果是这样,那听起来像是一个很好的封装单位.如果没有,也许你只是不必要地使事情变得复杂......