2013-11-30 4 views
1

Я недавно работаю на класс, который представляет собой таблицу:Стационарные методы делают класс гибридом?

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 был метод, который определяет, идентичны ли две таблицы. Однако, как говорится в книге «Чистый код», класс с общественными полями и поведением - это гибриды, а эти гибриды - плохой код. Из-за этого я не добавил метод экземпляра в класс, который проверяет, идентичны ли таблицы, вместо этого я добавил статический метод, который сравнивает две таблицы. Будет ли этот статический метод превратить класс в гибрид?

+0

Это действительно срочно, я должен приостановить свою работу и ждать ответа! Большое вам спасибо, если вы планируете ответить – Blip

+3

Вы должны использовать общедоступные свойства большую часть времени. Константа считается открытой как общественное поле. – Silvermind

+0

Спасибо. Могут ли свойства заменить методы getter и setter? – Blip

ответ

0

Посмотрите на IEqualityComparer. Основываясь на том, что вы написали, кажется лучшим решением. Для таблицы нет причин знать, как сравнить ее с другой таблицей. Если вы действительно хотите эту семантику внутри класса Table - проверьте методы GetHashCode и Equals. Если вы выберете второе решение - обязательно переопределите both GetHashCode and Equals.