У меня есть класс контейнера с параметрами, которые поступают из разных конфигурационных файлов (например, текст или 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.
[EDIT: Дополнительная информация]
ContainerClass представляет собой контейнер с информацией о конфигурации базы данных (пути, имя и т.д.).
textFile представляет собой конфигурацию базы данных.
xmlFile также содержит конфигурацию базы данных, но имеет больше параметров (конфигурации базы данных), чем мой textFile.
Я думаю о sth. как:
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;
}
}
Так я должен предпочесть метод новообращенного, A или напечатанный материал как?
Сначала я думаю о производительности, наилучшем использовании и личных привычках.
Зачем вам этот контейнерный класс? Разве это не должен быть базовый класс для xml и текстовых конфигураций? – Grzenio
Я так не думаю: ContainerClass представляет собой конфигурацию базы данных. Мой текстовый файл содержит конфигурацию базы данных. Мой xmlFile содержит разные таблицы, а одна таблица содержит конфигурацию базы данных, похожую на мою текстовую. Кроме того, конфигурация базы данных в моем xmlFile содержит больше записей, чем textFile. – Inno