Как инкапсулировать доступ к аналогичным внешним библиотекам в одном приложении? - PullRequest
0 голосов
/ 29 ноября 2011

У меня есть приложение, которое мы собираемся использовать из внешней библиотеки.Эта внешняя библиотека является одной из многих, которые предоставляют такую ​​же (или похожую) функциональность.

Возьмите zip-библиотеку в качестве примера, есть много библиотек, которые в основном делают одно и то же, извлекают и сжимают zip-файлы.

Однако каждая библиотека реализует свои публичные классы / интерфейснемного отличается друг от друга, даже если алгоритм внутреннего сжатия такой же, например,

namespace AmazingZipLibrary
{
    public class Archive
    {
        public Zip Add()
        {
          //Create a zip file
        }
    }
}

namespace YetAnotherAmazingZipLibrary
{
    public class Zip
    {
        public object Compress()
        {
          //create a zip file
        }
    }
}

Как можно использовать библиотеки взаимозаменяемо, не нарушая основное приложение каждый раз, когда мы хотим поменяться или использовать другую библиотеку?Я думаю, что основная причина таких требований - в целях оценки и тестирования.Но также возможно, что появится новая библиотека с плохой задницей, которую мы хотим принять (гипотетически).

Какие шаблоны проектирования могут помочь в этой ситуации?

Ответы [ 2 ]

3 голосов
/ 29 ноября 2011

Создайте свой собственный интерфейс с необходимыми методами.

Реализуйте этот интерфейс для каждой библиотеки, объединяя функциональность библиотеки с вашими вызовами.

interface ICompress
{
  void Create();
}

public class AmazingCompressor : ICompress
{
   public void Create()
   {
      // Call AmazingZipLibrary.Add
   }
}

public class YetAnotherAmazingCompressor : ICompress
{
   public void Create()
   {
      // Call YetAnotherAmazingZipLibrary.Compress
   }
}

В вашем коде обращайтесь только к ICompress.

Это известно как шаблон моста .

1 голос
/ 29 ноября 2011

Шаблон проектирования моста будет хорошим выбором.

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