Если класс" утилиты " является злым, где я могу поместить свой общий код? [закрытый]
Я обычно живу по правилу, что глобальные переменные / функции являются злом и что каждый кусок кода должен жить в классе, к которому он относится.
это очень простое правило, чтобы следовать, и я считаю, что я никогда не сталкивался с проблемой с этим правилом до сих пор.
сегодня, однако, мне нужно добавить функцию, чтобы мой сборка, а не к определенному классу. То есть почти все мои занятия может есть польза для этого конкретная функция.
куда я должен поместить эту функцию (+1 перегрузка)?
Если я положил его в класс" утилиты", я чувствую себя грязным. Если я привязываю его к полу-связанному классу, и пусть другие классы называют его напрямую, я чувствую себя хуже.
этот конкретный кусок кода в основном рубит IList<PointF>
в нормализованный список. Я чувствую прямо сейчас, что добавление его в качестве метода расширения на IList<PointF>
может быть лучшим выбором...
3 ответа:
если это операция на
IList<PointF>
, то должен быть метод расширения наIList<PointF>
.как правило,
Utils
иHelper
классы типа следует избегать. Чаще всего, вы обнаружите, что то, что вы можете думаю это метод утилиты, на самом деле довольно специфический метод, который, вероятно, принадлежит к своему классу (так же, как вы говорите). Тем не менее, будут конкретные доменные случаи, когдаUtil
- подобные классы (классы, которые группируют связанные полезные методы) являются допустимыми сущностями.
нет ничего плохого в "глобальных" переменных и методов. Вы используете их все время. Фреймворк любит называть их" статическими "классами или" статическими " методами.
мне редко нужно, но я обычно добавляю внутренний статический класс Util в пространство имен, что метод / переменная необходима для C# и модуль для VB.NET.
примеры из .NET Framework
System.Collections.Specialized.CollectionsUtil
System.Net.WebUtility
- Проверьте исходный код Microsoft для .NET Рамки. Вы найдете множество внутренних инженерных классов.