Если класс" утилиты " является злым, где я могу поместить свой общий код? [закрытый]


Я обычно живу по правилу, что глобальные переменные / функции являются злом и что каждый кусок кода должен жить в классе, к которому он относится.

это очень простое правило, чтобы следовать, и я считаю, что я никогда не сталкивался с проблемой с этим правилом до сих пор.

сегодня, однако, мне нужно добавить функцию, чтобы мой сборка, а не к определенному классу. То есть почти все мои занятия может есть польза для этого конкретная функция.

куда я должен поместить эту функцию (+1 перегрузка)?

Если я положил его в класс" утилиты", я чувствую себя грязным. Если я привязываю его к полу-связанному классу, и пусть другие классы называют его напрямую, я чувствую себя хуже.

этот конкретный кусок кода в основном рубит IList<PointF> в нормализованный список. Я чувствую прямо сейчас, что добавление его в качестве метода расширения на IList<PointF> может быть лучшим выбором...

3 56

3 ответа:

если это операция на IList<PointF>, то должен быть метод расширения на IList<PointF>.

как правило, Utils и Helper классы типа следует избегать. Чаще всего, вы обнаружите, что то, что вы можете думаю это метод утилиты, на самом деле довольно специфический метод, который, вероятно, принадлежит к своему классу (так же, как вы говорите). Тем не менее, будут конкретные доменные случаи, когда Util - подобные классы (классы, которые группируют связанные полезные методы) являются допустимыми сущностями.

нет ничего плохого в "глобальных" переменных и методов. Вы используете их все время. Фреймворк любит называть их" статическими "классами или" статическими " методами.

мне редко нужно, но я обычно добавляю внутренний статический класс Util в пространство имен, что метод / переменная необходима для C# и модуль для VB.NET.

примеры из .NET Framework

  • System.Collections.Specialized.CollectionsUtil
  • System.Net.WebUtility
  • Проверьте исходный код Microsoft для .NET Рамки. Вы найдете множество внутренних инженерных классов.

вы должны поместить его в' ListUtilities ' или PointListUtilities класс, конечно. Тогда вы не нарушаете принцип единой ответственности, который является основной проблемой с классом "всеохватывающих утилит".