考虑到我有一项服务来计算与界面的客户帐户余额
public interface ICustomerAccountCalculation
{
Decimal Balance(int customerId);
}
Run Code Online (Sandbox Code Playgroud)
是否更好的风格,而不是传递客户ID来传递这样的客户对象
public interface ICustomerAccountCalculation
{
Decimal Balance(Customer customer);
}
Run Code Online (Sandbox Code Playgroud)
我认为这确实是一个你需要回答的问题,因为这取决于情况。传递实体与仅传递 id 的成本与收益是多少?就您的服务合同而言,ID 似乎足以获取客户的帐户余额(我知道我正在做出假设)。其他需要考虑的事情是序列化/反序列化实体的成本等......
但在另一种情况下,这可能有意义,具体取决于您正在执行的操作。假设该操作需要调用者提供有关客户的更多信息,如果您已经从调用者中加载了该信息,那么在操作中访问数据库获取该信息是没有意义的......
所以,这取决于。
仅传递将在函数中使用的值。如果 customerid 足以让您执行进一步的计算,则仅传递那么多 - 如果需要任何其他字段,则将其作为不同的参数传递给函数。
从对象中抽象出函数是一个很好的做法。函数应该只关心输入 VS 输出。例如,如果您的函数是,float computeBalance(float, float)那么它应该能够采用任意两个浮点值并执行计算。传递对象意味着您已经读取了该对象并提取了所需的字段...这不是一件好事:)
Édg*_*dón -1
更自然的做法是传递实体,但这通常会导致性能问题,因此在大多数实际场景中,您只需传递密钥。