рефакторинг stati c классов с повторяющимся кодом c# - PullRequest
0 голосов
/ 31 января 2020

Моя кодовая база имеет несколько различных классов c (например: FooIO, BarIO), в которых есть идентичные методы. Единственное различие в функциональности между этими методами - это объект конфигурации (например, Foo, Bar) и имя файла.

Я вытащил фактическую реализацию методов в обобщенный c класс, называемый BaseIO.

В каждом классе IO у меня есть конструктор stati c, который создает экземпляр BaseIO с соответствующим классом и fileName:

static FooIO()
    {
        configIO = new BaseIO<Foo>("Foo.xml");
    }

и для всех методов, которые я вызываю этот экземпляр:

public static void Save(Foo config)
    {
        configIO.Save(config);
    }

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

1 Ответ

0 голосов
/ 31 января 2020

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

Просто создайте нормальный класс, который нуждается в создании экземпляра. Затем назначьте экземпляр полю stati c:

static GenericIO<Foo> FooIO = new GenericIO<Foo>();

. Это простое изменение позволит вам неограниченное количество наборов этих настроек. И вы также можете изменить, какой экземпляр вы назначаете ему в одном месте. На самом деле, поскольку это не помечено как доступное только для чтения, вы можете даже изменить экземпляр во время выполнения .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...