我有一个容器类,其参数来自不同类型的配置文件(例如文本或 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 代表一个简单的 Container。所以我想像
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;
在文本文件配置中:
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;
}
}
那么我应该更喜欢转换方法,类型转换还是两者兼而有之?
一开始我会考虑性能、最佳用法和个人习惯。