来自Code Review Stack Exchange的

This question was migrated,因为可以在Stack Overflow上进行回答。
                            Migrated 3年前。
                        
                    
                
                            
                    
考虑以下接口:

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类使您有机会清楚地区分这两个类别。

与所有原始“开始日期/结束日期/ ids”数据包的出现相比,在代码中查找所有Parameters用法要容易得多。

话虽这么说,可读性并不是一个小问题。我觉得每种方法6个参数太多了。基于经验,我不会打赌它会停在6点。

10-06 02:08