通常只使用一个 ID 就足够了,而且容易得多,因为您可以简单地将一个 ID 从一个地方传递到另一个地方。这对于 Web 服务尤其重要,您希望将传输的数据量降至最低。
但是,如果您经常有较大的方法签名,其中方法名称不能很好地指定输入:
List<Cars> GetCars(int makeId, int modelId, int year, int dealershipId);
... 将错误的 ID 传递到错误的地方会变得非常容易。这就是我开始尝试寻找不同策略的地方。将您的输入强输入为域对象是一种解决方案,但与简单地使用特殊选项 POCO 相比,它通常会给您带来更多麻烦:
public class GetCarsOptions
{
public int MakeId {get;set;}
public int ModelId {get;set;}
public int Year {get;set;}
public int DealershipId {get;set;}
}
List<Cars> GetCars(GetCarsOptions options)
{
ValidateOptions(options); // make sure the values all make sense.
}
事实是,您无法在运行时捕获所有可能的错误,因此最好将自动化测试与“快速失败”技术结合起来,尝试在编译后和部署前捕获尽可能多的错误。