Что-то не так со статическим классом, у которого есть абсолютно не связанные, статические методы? - PullRequest
1 голос
/ 01 июля 2011

В настоящее время я работаю с большим количеством кода на C #, который изначально не был написан мной. Они были написаны как огромные куски ужасно выглядящего кода, и теперь моя работа - разобраться в этом.

В любом случае, существует много повторений кода в большом количестве разных файлов aspx.cs. Например, существует около пяти файлов с выделенным кодом, в которых один и тот же фрагмент кода многократно повторяется для вывода некоторого текста в файл. Я мог бы иметь метод:

private void outputToFile(string text)

повторяется в пяти разных кодах за файлами.

Однако мне интересно, если это плохая практика или просто неправильно объявлять статический класс, называемый чем-то вроде «MethodHub», который содержит outputToFile (текст строки), а также дюжину или около того других методов, которые не относятся к каждому из них. другой

Общая цель - получить доступ к этим методам из статического класса, чтобы я мог эффективно удалять сотни строк кода в других.

Кто-нибудь может увидеть что-то не так с этим, или какие-либо проблемы, с которыми я могу столкнуться?

Ответы [ 3 ]

4 голосов
/ 01 июля 2011

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

interface IOutputService
{
  void Output(string data);
}

и используя класс реализации вашей реализации, такой как

class FileOutputService : IOutputService
{
    // ...
}

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

EDIT:

  1. Было бы беспорядочно покрывать логику, которая использует статические вызовы clas, с помощью модульных тестов
  2. Со статическим классом гораздо сложнее легко переключать логику / поведение, вам нужно изменить саму реализацию логики, например, вам нужно переключиться с вывода файла на вывод базы данных, гораздо проще будет внедрить другуюсервис, который реализует общий интерфейс, а не играет с потенциальным рефакторингом
2 голосов
/ 01 июля 2011

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

0 голосов
/ 01 июля 2011

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

...