假设有一个人和一个地址对象。该人员不拥有对该地址的引用,而仅拥有其ID。例如:
Person {
id: PersonId,
addressId: AddressId,
name: String,
...
}
Address {
id: AddressId,
street: String,
....
}
该模型是旧模型,无法更改。
现在您要在此人上设置一个地址,您将如何设计此调用的API。您只有两种可能:
void setAddress(PersonId id, Address address)
void setAddress(Person person, Address address)
如您所见,唯一的区别是,一次只发送了个人的ID,一次是发送了完整的person对象。
您会选择哪个?为什么?
PS:这个问题来自工作中的内部讨论,我只是对其他程序员/设计师如何看待它感兴趣。
答案 0 :(得分:2)
我会选择第一个,因此此API的调用方仅需要提供最少的信息,并且API实现会获取进行调用所需的所有信息(在您的示例中,从数据库或其他内容中获取人员)。 第二个对我来说似乎不合逻辑,因为如果您传递整个人员对象,则还必须从数据源中获取人员(对象可能在调用期间已被修改),因此您将传递比在这种情况下需要。