是否有关于在重载方法上返回不同返回类型的最佳实践?例如,如果我在DAL中有一个Load方法,我要么加载一个项目或一堆项目.我知道我可以使用多种方法:
加载一个对象
MyBusinessObject LoadOne(int id)
{
}
Run Code Online (Sandbox Code Playgroud)
加载多个对象
MyBusinessObject[] LoadMany(params int[] ids)
{
}
Run Code Online (Sandbox Code Playgroud)
现在,我知道我可以做的是重载一个方法并具有不同的返回类型.像这样:
MyBusinessObject Load(int id)
{
}
Run Code Online (Sandbox Code Playgroud)
和
MyBusinessObject[] Load(params int[] ids)
{
}
Run Code Online (Sandbox Code Playgroud)
虽然似乎没有什么可以阻止我这样做,并且从API的角度来看它保持整洁,这看起来是个好主意吗?我昨晚遇到它,部分我认为我不应该这样做是因为想要匹配重载方法的返回类型.
我也可以让Load(int id)方法返回一个只包含一个项目的集合.在我看来,这违反了最少惊喜的原则,但是如果你期望返回一个项目,你应该返回该项目,你不应该返回包含单个项目的列表.
所以这是围绕这些想法的矛盾思想:
所以后两种想法比第一种想法更重要,但与此同时,第一种想法似乎是一种程序化的最佳实践.
有没有围绕这种做法的最佳做法?我有兴趣听听别人对这个问题的看法.
我可能想要明确API并在名称中使用多个:
Customer LoadCustomer(int id) {...}
Customer[] LoadCustomers(params int[] id) {...}
Run Code Online (Sandbox Code Playgroud)
实际上,params这里很少有用 - 你通常不会在编译时知道id.