Подтвердить что ты не робот

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Образцы из .NET Framework

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

Ответ 3

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