假设我想制作一个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)
据推测,你需要考虑有人可能没有双臂或双腿的情况.
[注意:正如评论中所指出的,理想情况下,这些应该在构造函数中设置,而不是使用属性.这是一般原则:以连贯,可用的状态构造对象.
这取决于实际情况.这里似乎没有是很远点在两臂组合在一起和两条腿一起......"一对臂"的概念通常不是有用的.
另一方面,如果您正在讨论将"DeliveryAddress1","DeliveryAddress2","DeliveryTown","DeliveryZipCode","BillingAddress1","BillingAddress2","BillingTown"和"BillingZipCode"分组到一个Address类的两个实例中,那是另一回事.
基本上,各个部分是否属于自然分组?这个组是否可能需要以复合方式处理?你能看到自己将小组传递给其他一些代码吗?如果是这样,那听起来像是一个很好的封装单位.如果没有,也许你只是不必要地使事情变得复杂......