我正在做一个小型引擎,将内容从一个项目迁移到另一个项目,而它使用内容的系统被分成小模块。
我有一个模块选择,应将其内容转移到另一个项目中。
这里哪种设计更合适? 我只有用户输入的模块名称,如:内容,导航,盒子,付款等......
我在想Factory,但似乎有点不对劲。也许策略?
基本上,我有一堆类,它们都共享相同的接口,但实现方式不同,因为每个模块都有不同的SQL表来获取内容以及如何将其解析给用户。
感谢任何帮助。
答案 0 :(得分:1)
如果我理解你的问题,那么答案就是工厂和战略。 Strategy对象知道如何使用特定数据源,并且Factory知道根据提供的别名为您提供哪个Strategy对象。
var dataStrategy = dataFactory.GetStrategyByAlias(alias);
dataStrategy.Insert(data);
您的具体策略类可以覆盖Alias属性以协助工厂,如下所示:
interface IDataStrategy {
string Alias { get; }
void Insert(MyDataClass data);
}
class ConcreteStrategy : IDataStrategy{
string Alias {
get{
return "Some Data source alias";
}
}
}
class DataFactory{
private IDataStrategy[] _strategies;
public IDataStrategy GetStrategyByAlias(string alias){
return _strategies.FirstOrDefault(x => x.Alias == alias);
}
}
如果消费对象有一个准备好的策略列表,那么Factory可能过度,因为它可能只执行相同的Linq语句。