【问题标题】:Use methods in classes在类中使用方法
【发布时间】:2011-11-23 12:55:39
【问题描述】:

我有两节课。例如,让它们成为目录和文件。有我自己的自定义类,不是 .NET Framework 的一部分。 因此,目录具有标题字段和文件列表。文件也有几个字段。

我应该在哪里放置按目录标题返回文件列表的方法,例如, 在 Directory 类中还是在 File 类中?

即哪个更好:

public List<Files> Directory.GetFiles(string directoryTitle){...}
public List<Files> File.GetFilesByDirectory(string directoryTitle){...}

为什么?

【问题讨论】:

  • 它应该返回IEnumerable&lt;T&gt;ReadOnlyCollection&lt;T&gt;,而不是List&lt;T&gt;
  • System.IO.Directory.GetFiles 有什么问题?
  • @Groo - 这只是一个例子。我的意思是任何课程都有这种情况。
  • @Tannheuser - 但答案将取决于您正在建模的领域。对于文件和目录可能正确的情况,对于例如狗和猫来说可能是错误的。 “任何课程”都没有唯一的正确答案。
  • @ShellShock - 我失败了,当然不是“任何课程”,而是彼此相关的课程。喜欢用户和订单等。

标签: c# .net class methods


【解决方案1】:

两个想法:

首先,目录知道列出文件,所以它应该存在。

其次,尝试为您的返回类型坚持接口 - IList 而不是 List。这为您返回不同类型的列表和进行单元测试提供了更大的灵活性。

【讨论】:

  • 正如上面提到的@SLaks,只读集合(或数组,或IEnumerable)将是返回类型的更好选择。
  • @Groo:不是数组;数组不是只读的,必须调整大小以适应。
  • @SLaks:一个只读集合一个数组。我个人只会考虑IEnumerable,但Directory.GetFiles(以及许多其他BCL 类)返回一个数组。如果不出意外,与List 相比,需要额外的努力来调整它的大小。
  • @Groo:返回数组的框架方法早于泛型。现代代码不应该返回数组,因为它需要在填充后调整数组的大小以适应它(不像集合)
【解决方案2】:

我会说首先是更好

public List<Files> Directory.GetFiles(string directoryTitle){...} 

因为文件本身不应该知道它的位置,而目录知道它包含哪些文件。

【讨论】:

    【解决方案3】:

    您实际上将它们放在哪里是您自己的特权,但我想说在这种情况下使用第一个版本在语义上更合理:Directory.GetFiles。 NET 框架实际上公开了一个 Directory 类,您可以将其用作示例,其中包含这样一个方法。

    考虑到目录实例已经包含一个已知文件的列表,这样做似乎也有点违反直觉。

    【讨论】:

      【解决方案4】:

      我个人会不理会这两个类,并创建第三个类来完成最大限度地提高代码重用机会的工作。将其称为 DirectoryFileFinder 或类似名称。

      【讨论】:

        猜你喜欢
        • 2021-11-03
        • 2012-11-14
        • 2017-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多