Альтернатива библиотекам статических классов

У меня есть большая коллекция статических классов «Утилита», которые содержат очень общие статические методы. Например, у меня есть класс CollectionUtility, в котором есть такие полезные методы, как:

общедоступная статическая пустота RemoveDuplicates (коллекция ICollection) ... и т. д.

В C# 3.0 я преобразовал их в методы расширения.

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

Вопрос к тем из вас, кто работает над крупными корпоративными проектами для крупных компаний - поддерживаете ли вы библиотеки подобных служебных классов или нет? Что ты?

Пожалуйста, пометьте вопросы, связанные с языком, с помощью языка.

camh 09.10.2008 02:56

Нитпик: Не существует такого понятия, как «C# 3.5». Пожалуйста, обратитесь либо к «C# 3.0», либо к «.NET 3.5», либо к обоим.

Jon Skeet 09.10.2008 06:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
2
1 199
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Точно нет. Служебные модули со временем превращаются в большие коллекции грубого кода.

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

Конфигурация никогда не изменится?!? -1 Нет тебе супа.

Amy B 09.10.2008 07:17

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

mannu 10.10.2008 11:23

Я поддержу тебя из страны негатива, друг

joelc 16.09.2016 16:42
Ответ принят как подходящий

Вы говорите о коде, который будет частью общей библиотеки. Статические методы действительно используются в общих библиотеках. Проверьте System.Linq.Enumerable

Я бы следовал этим рекомендациям:

  • По умолчанию это не статические методы. Это должны быть только статические методы, потому что они, естественно, не имеют состояния (поведение зависит только от параметров). Если они не имеют естественного состояния без состояния, тогда вам следует создать соответствующий класс для управления этим состоянием.
  • Покройте их с помощью модульных тестов. Если вы больше ничего не тестируете, выполните модульное тестирование этих файлов. Это должно быть очень легко сделать. Если это непросто, значит, это неправильно.

Если вам нравится внедрение зависимостей, вы все равно можете это сделать. Код, основанный на статическом методе, может вместо этого вызывать Func (T, U) или действие, которое ссылается на этот статический метод.

I've heard some talk that in an 'enterprise level' application it is often considered best practice to avoid large libraries of these static classes and methods. I imagine that it could get quite hard to maintain.

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

Во всяком случае, это меня озадачивает. Если бы вы не поместили их в общую библиотеку, куда бы вы их поместили? Копировать / вставлять в каждый проект или что-то в этом роде?

Другие вопросы по теме