我正试图提出一种方法,以编写可用于多个数据存储的通用接口,基本上,通用类型将为数据存储中的数据指定ID(其中一些数据存储强烈使用类型的库,因此您必须调用类似long createNode(Node node)
)
例如,我们现在使用的系统使用长号作为ID,但是如果我们进行过渡(或同时使用两者),则很可能是GUID。业务逻辑层中的实体已经设置好了,基本上可以认为这是一个在节点上具有一堆自定义属性的文件系统。
到目前为止,我尝试过这样的事情:
public interface DataThing<T>
{
T CreateThing(CustomEntity node);
CustomEntity GetThing(T ID);
}
public class LongDataThing : DataThing<long>
{
long CreateThing(CustomEntity node)
{
//...implement
}
CustomEntity GetThing(long ID)
{
//...implement
}
}
...对GUID / Int / string ...做同样的事情
然后,当要实例化类以使其基本上与工厂设计模式一起使用时,我就会遇到问题。我以为我可以做类似的事情:
private DataThing myDataStore;
switch(config.dbtype)
{
case "longDB":
this.myDataStore = new LongDataThing();
break;
case: "stringDB":
this.myDataStore = new StringDataThing();
break;
//...etc.
}
但是我不能不将private DataThing myDataStore;
指定为长字符串等而创建它,这意味着业务逻辑已经必须知道实现了哪种类型,而不仅仅是向工厂索要数据存储对象。
那么我在这里想念什么?您是否不能抽象出这样的接口数据类型,并使它对调用“业务逻辑”透明,并从配置文件或其他外部逻辑中确定需要哪种实现?