c# - 将一长串参数包装为单个对象

标签 c#

考虑以下接口(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/

相关文章:

c# - Winforms 格式化文本框为货币

c# - C# SortedList 如何按值获取键?

c# - 如何使用 youtube API V3 (c#) 安排 youtube 视频

c# - automapper 文档不完整

c# - 如何更改 ListView 的默认选择颜色?

C# 在多个对象列表之间相交

c# - 如何使用通配符搜索文件列表

c# - System.Net.ProtocolViolationException : You must write ContentLength bytes to the request stream before calling [Begin]GetResponse

c# - 自定义授权过滤器属性参数

c# - 从基本 URI 和相对路径创建新的 URI - 斜线有区别吗?