假设我有三个类:
用户<
建筑/strong>
汽车
每一个都有它们相关的属性。例如
用户有姓名、年龄、电子邮件
大楼有楼龄、房间、火警
轿车有品牌、座椅、top_speed
假设我有一个数据库,它存储了用户与建筑物、用户与汽车之间的关系。
在我的Building类中,我的save_building方法需要user_id。我有两个选择。
1)我可以在Building类中重新创建user_id属性(冗余和脆弱,需要在Car类中复制)或
2)我可以直接引用user对象并获得user_id。
这两个似乎都不对。
当我设置属性时,我也验证它们,然后将这些验证的任何错误存储在对象本身中。如果我使用选项2,在允许我的save_building方法继续之前,我必须检查其他对象的错误,而不是只检查我正在处理的对象。
选项1是正确的前进方式还是选项2?
编辑:为了清晰起见,数据库关系表如下:
user_buildings: user_id, building_id
User_cars: user_id, car_id
Edit2: Making the question non-open ended
用户和建筑物之间的关系必须存储在数据库中,因此显然需要以某种方式在您的类中显示。为了建立对象之间的关系而存储对象引用没有什么冗余的,所以不要这样认为。唯一可能被移除的冗余是用户和建筑物相互指向,而不是只有一个点指向另一个点。这有点像应该使用单链表还是双链表的问题。
给定您的两个选项,我更喜欢选项1,因为在用户未知的情况下,您可以将其设置为null
,这比0
或-1
或在用户未在数据库中查询/加入或没有关系存在的情况下的任何整数更具有语义性。
您没有列出的另一个选项是让save_building
忽略用户和建筑物之间的关系变化。也许这个功能应该只在用户类中处理。也许您想要一个新的类building-owner类,它的目的是处理这个功能。