Общий интерфейс для сменного / заменяемого слоя данных - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь найти способ написать универсальный интерфейс, который может быть реализован для нескольких хранилищ данных, в основном универсальный тип будет указывать идентификатор для данных в хранилище данных (некоторые из этих хранилищ данных сильно используютбиблиотеки, поэтому вы должны вызывать что-то вроде long createNode(Node node))

Например, система, которую мы используем сейчас, использует long для идентификаторов, но если мы осуществили переход (или используем оба одновременно)к чему-то вроде SQL это, скорее всего, будет 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; без указания его как long, string ... и т. Д., Что означает, что бизнес-логика уже должна знать, какой типреализуется вместо того, чтобы просто запросить у фабрики объект хранилища данных.

Так чего мне здесь не хватает?Разве вы не можете абстрагироваться от типа данных интерфейса, подобного этому, и сделать его прозрачным для вызывающей «бизнес-логики» и выяснить, какая реализация требуется из файла конфигурации или какой-либо другой внешней логики?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...