可替换/可交换数据层的通用接口

时间:2019-03-07 15:58:57

标签: c# interface

我正试图提出一种方法,以编写可用于多个数据存储的通用接口,基本上,通用类型将为数据存储中的数据指定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;指定为长字符串等而创建它,这意味着业务逻辑已经必须知道实现了哪种类型,而不仅仅是向工厂索要数据存储对象。

那么我在这里想念什么?您是否不能抽象出这样的接口数据类型,并使它对调用“业务逻辑”透明,并从配置文件或其他外部逻辑中确定需要哪种实现?

0 个答案:

没有答案