Можно ли уменьшить кол-во switch'ей?

В общем, имею такую иерархию:

Режимы сохранения:

public enum SaveConfigMode
{
    Mode1,
    Mode2,
    Mode3
}

Базовый класс для режимов сохранения, где каждый наследник этого класса имеет свой уникальный набор полей:

public abstract class SaveConfigBase
{
   public SaveConfigMode SaveConfigMode { get; protected set; }

    protected SaveConfigBase(SaveConfigMode saveConfigMode)
    {
        SaveConfigMode = saveConfigMode;
    }
}

Каждое значение enum имеет по одному наследнику.

Главная конфигурация, которая имеет свой набор полей(его не отобразил), а так же хранит в себе параметры сохранения

public class MainConfig
{
    SaveConfigBase SaveConfig;
}

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

На текущий момент у меня 3 места, где я должен воспользоваться свичами:

1 и 2 - это сериализация и десириализация, которую я делаю руками (так надо) Т.е я получил на вход MainConfig, сериализовал/десериализовал его поля, а потом посылаю поле SaveConfigBase в отдельный метод сериализатора, где через switch перебираю значения, чтобы привести SaveConfigBase к конкретному классу и вызвать нужный метод сериализации/десериализации.

3 - это фабрика, которая на основании этого перечисления создаст мне необходимую реализацию класса

Можно ли чего-то придумать или это наиболее оптимальное решение?


Ответы (0 шт):