考虑以下接口(interface):
public interface SomeRepo
{
public IEnumerable<IThings> GetThingsByParameters(DateTime startDate,
DateTime endDate,
IEnumerable<int> categorIds,
IEnumerable<int> userIds,
IEnumerable<int> typeIds,
string someStringToFilerBy);
}
这样做有什么好处吗?
public IEnuemrable<IThings> GetThingsByParamters(IParameter parameter);
IParameter
是这样定义的对象:
public interface IParameter
{
DateTime startDate { get; }
DateTime endDate { get; }
IEnumerable<int> categorIds { get; }
IEnumerable<int> userIds { get; }
IEnumerable<int> typeIds { get; }
string someStringToFilerBy { get; }
}
我看不到执行 IParameter
的任何好处,除了它使它更具可读性,但额外的复杂层似乎不值得。
有什么我可能遗漏的吗?谢谢。
最佳答案
如果那只是为了那个地方,可能不值得那么多。
自己创建一个类确实有一些可能的好处,但它们完全依赖于此;您是否能够重复使用它。
您可以向您的 IParameters
实现添加某种早期数据验证(例如,endDate
不能早于 startDate
- 它是常识,您无需成为存储库对象即可知道)。
如果一些值是可选的而一些不是,Parameters
类让您有机会清楚地区分这两个类别。
在您的代码中查找所有 Parameters
的用法比查找原始“开始日期/结束日期/id”包的所有出现要容易得多。
话虽这么说,可读性并不是一个小问题。我觉得每个方法 6 个参数太多了两倍。根据经验,我不敢打赌它会在 6 点停止。
关于c# - 将一长串参数包装为单个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36756572/