【问题标题】:Does static methods make a class a hybrid?静态方法是否使一个类成为混合体?
【发布时间】:2013-11-30 16:07:16
【问题描述】:

我最近正在研究一个代表表格的类:

public class Table
{
    public StudentsOfTableList StudentsOfTable;
    public Point PositionUpperLeftCorner;
    public Size TableSize;
    public readonly Guid TableID;

    public Table()
    ...
    public static bool AreIdentical(Table table1,Table table2)
    ...
    public static bool Table1InFrontOfTable2(Table table1, Table table2)
            ...
}

正如你在这里看到的,这个类实际上是一个数据结构。稍后我有一些代码可以比较 TableID 以查看两个表是否相同,我真的想重构代码,以便 Table 类中有一个方法可以确定两个表是否相同。然而,正如 Clean Code 书中所说,具有公共字段和行为的类是混合体,而这些混合体是糟糕的代码。因此,我没有向检查表是否相同的类添加实例方法,而是添加了一个比较两个表的静态方法。这个静态方法会把类变成混合类吗?

【问题讨论】:

  • 这个真的很紧急,我要暂停我的工作,等待答复!!如果你打算回答,非常感谢你
  • 您应该在大部分时间使用公共属性。常量被认为可以作为公共字段。
  • 谢谢。属性可以代替 getter 和 setter 方法吗?
  • 是与否,简单的 set 和 get 方法可以被替换,长时间运行和复杂的 set 和 get 方法应该保持公共方法。还有更多,但基本上归根结底。
  • 也许这可以说明问题:msdn.microsoft.com/en-us/library/ms182141.aspx

标签: c# data-structures coding-style code-cleanup hybrid


【解决方案1】:

看看IEqualityComparer。根据您所写的内容,这似乎是最好的解决方案。表没有理由知道如何将其与其他表进行比较。如果你真的想要 Table 类中的这种语义 - 检查 GetHashCodeEquals 方法。如果您选择第二种解决方案 - 请确保覆盖 both GetHashCode and Equals

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 2011-03-09
    相关资源
    最近更新 更多