我有一个容器类,其参数来自不同类型的配置文件(例如text或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;
在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;
}
}
我应该更喜欢转换方法,类型转换还是两者兼而有之?
起初我会考虑表现,最佳用法和个人习惯。
答案 0 :(得分:3)
我想我会沿着这些方面做点什么:
IConfig
IConfigLoader
XmlConfigLoader
个实例的不同配置加载器实现(TextConfigLoader
,IConfig
等)。IConfig
实例传递给ContainerClass
构造函数,并让它自己初始化。关于你的问题,我不确定将配置对象传递给容器会破坏SRP。至少,你可以拥有一个容器工厂,它可以读取和读取配置,以实例化和初始化容器。它可能是过度设计的 - 这取决于容器创建任务的复杂程度,我想。