У меня есть контейнерный класс с параметрами, которые поступают из различных типов файлов конфигурации (например, текст или xml).
Итак, я создал класс для textConfigurationFiles и класс для xmlConfigurationFiles (я думаю, что позже я реализую интерфейс IConfigFile).
Инициализация моего контейнерного класса выглядит следующим образом:
ContainerClass myContainer = new ContainerClass();
myTextConfig = new TextConfig(textFile);
myContainer.ParameterA = myTextConfig.ParameterA;
myContainer.ParameterB = myTextConfig.ParameterB;
myContainer.ParameterC = myTextConfig.ParameterC;
или для xml
ContainerClass myContainer = new ContainerClass();
myXMLConfig = new XMLConfig(xmlFile);
myContainer.ParameterA = myXMLConfig.ParameterA;
myContainer.ParameterB = myXMLConfig.ParameterB;
myContainer.ParameterC = myXMLConfig.ParameterC;
но вместо присвоения каждого отдельного значения я хотел бы сделать какое-то преобразование. Теперь я не знаю, должен ли я реализовывать приведение типов или просто простой метод, который возвращает объект ContainerClass?
myContainer = myTextConfig.ConvertToContainer();
или
myContainer = (ContainerClass)myTextConfig;
Что бы вы предложили?
Поскольку я пытаюсь реализовать принцип единой ответственности, я хочу, чтобы мой ContainerClass представлял простой контейнер. Поэтому я думаю что-то вроде
ContainerClass myContainer = new ContainerClass(configFile);
будет порвать с SRP?
Возможно, я должен упомянуть, что мой ContainerClass инициализируется текстовым или файлом xml; это не значит, что параметры являются результатом как текстового , так и XML-файла.
[РЕДАКТИРОВАТЬ: Дополнительная информация]
ContainerClass представляет контейнер с информацией о конфигурации базы данных (пути, имя и т. Д.).
textFile представляет конфигурацию базы данных.
xmlFile также содержит конфигурацию базы данных, но имеет больше параметров (конфигурации базы данных), чем мой textFile.
Я думаю о чем-то. как:
IConfig config = new TextFileConfig(fileName);
ContainerClass container = config.ConverToContainer();
или
IConfig config = new TextFileConfig(fileName);
ContainerClass container = (ContainerClass)config;
В TextFileConfig:
public class TextFileConfig : IConfig
{
ContainerClass container;
//
// Constructor
//
public TextFileConfig(string fileName)
{
//
// Initialize all values from file fileName
//
...
//
// Initialize container with standard values
//
container = new ContainerClass();
//
// Merge container with values from textFile
//
...
//
// Now container contains all values from textFile,
// all missing parameters are initialized with
// standard values.
//
}
public ContainerClass ConvertMethodOrTypecastThatsTheQuestion()
{
return container;
}
}
Так что мне лучше выбрать метод convert, typecast или оба?
Сначала я думаю о производительности, лучшем использовании и личных привычках.