不确定如何实现此场景:
我有一个基类,比如说
public abstract class ConfigurationBase
{
public int Id {get; set;}
public string Name {get; set;}
}和几个派生类
public class Config1 : ConfigurationBase
{
public string Url {get;set;}
public string ReferrerUrl {get; set;}
}
public string Config2 : ConfigurationBase
{
public string Domain {get; set;}
public bool AllowCookie {get; set;}
}以及一个使用不同参数调用的ConfigurationService。
其思想是根据参数范围构造一个Config1或Config2等实例。
所以问题是如何在代码中实现这一点?
根据相同的条件,实例化某个类型。
到目前为止,我们的一个想法是将要实例化的完全限定类型存储在数据库中,并通过反射构造它。
我有点不愿意使用这种方法,我在问是否有其他的答案。
发布于 2012-03-07 17:46:39
如果您了解ConfigurationBase的所有子类,并且实例化它们的规则是相同的,那么您应该看到的是Factory模式。
如果您不了解所有的子类,那么您需要从数据存储(不一定是数据库)中动态地提取类型,并在运行时实例化它。
如果您不知道实例化对象所依据的所有规则,则需要从数据存储中提取规则并执行它们。
显然,你让它变得越动态,你必须处理的复杂性就越大。
发布于 2012-03-07 17:46:09
我认为正确的方法是创建一个factory class来处理配置对象的创建:
public class ConfigurationFactory {
public ConfigurationBase GetConfig(object[] parameters)
// Build your objects here according to your params... do stuff...
if (parameters[0] ...)
return new Config2(...);
elseif ...
return new Config1(...);
}
}然后使用您的参数调用该方法
ConfigurationFactory factory = new ConfigurationFactory();
ConfigurationBase config = factory.GetConfig(parameters);尽管这种方法需要了解如何创建不同的对象,但它只集中在一个地方,因此很容易更改。
此外,您可能希望定义一个更通用的接口来定义如何获取配置数据,这样您的对象将更容易处理,而无需知道它们的具体类型。
希望这能有所帮助
发布于 2012-03-07 17:45:24
工厂模式怎么样?
Edit:我意识到你不想保持单独的方法,在这种情况下,你将需要一个enum (至少)+一个(丑陋的)方法,接受所有可能的参数(即表中的列)
public class ConfigurationService {
private ConfigurationBase CreateConfig1(string id, string name, string url, string referenceUrl){...}
private ConfigurationBase CreateConfig2(string id, string name, string domain, bool allowCookie){...}
public ConfigudationBase CreateConfig( string id, string name, string domain, bool allowCookie, string url, string referenceUrl, ConfigType configTypeEnum){
//call the expected factory method based on enum type.
}
}https://stackoverflow.com/questions/9598942
复制相似问题