API для некоторых модулей в C ++ - PullRequest
1 голос
/ 23 марта 2012

У меня есть набор библиотек C ++, и теперь я хотел бы предоставить общий интерфейс API для этой библиотеки!

Идея заключается в использовании шаблона оформления фасада; но не могу применить это на DLL, только на объекты / классы! Я думаю, что необходимо объединить весь код в одной библиотеке (одном проекте) с этим проектом, не так ли?

Есть идеи?!

Большое спасибо!

приветствует

1 Ответ

2 голосов
/ 25 марта 2012

Справочная информация:

  • У вас есть эта большая библиотека C ++, охватывающая несколько библиотек DLL.
  • Ваша библиотека экспортирует объекты C ++, а не функции C (поэтому она не переносится в двоичном коде через разные компиляторы).
  • Если вы хотите предоставить простой интерфейс для доступа к этой библиотеке, вы будете использовать шаблон фасада для этого.

Вы не делаетеТ нужно упаковать все в одну DLL.Одной из целей этого шаблона является упрощение зависимостей.Его клиенты могут иметь зависимость только от этой библиотеки DLL (но ваш интерфейс может охватывать несколько библиотек DLL, если это необходимо).Например:

  • Base64.dll: содержит функции C для кодирования / декодирования текста в base64.
  • Network.dll: содержит объекты C ++ для управления сетевыми подключениями.
  • RegEx.dll: содержит объекты C ++ для анализа RegEx.
  • MailHelpers.dll: содержит объекты C ++ для отправки / получения необработанных сообщений.

Теперь вам нужнообеспечить простой красивый интерфейс для этой задачи.Объект для представления сообщения, другой для соединения и так далее.Вы создадите другую библиотеку DLL (например, Smtp.dll), которая зависит от Base64.dll, Network.dll, RegEx.dll, MailHelpers.dll и предоставляет один общий высокоуровневый интерфейс C ++.Его клиенты добавят зависимость к этой DLL, и они не будут ничего знать о других.

Итак, наконец, ответ no , вам не нужно объединять весь код (изто, что вы хотите скрыть с фасадом) в одной библиотеке.

Второй сценарий: ваша библиотека фасадов будет более сложной.Вы хотите удалить все продвинутые задачи из Smtp.dll в другую библиотеку и планируете создать вспомогательную библиотеку, чтобы упростить выполнение общих задач.У вас будет что-то вроде этого:

  • SmtpCore.dll: упрощенный унифицированный интерфейс для SMTP-клиентов.
  • SmtpTasks.dll: вспомогательная библиотека с простыми методами для общих задач.Это зависит от SmtpCore.dll, его клиенты будут иметь только эту зависимость (например).
  • Mail.dll: полнофункциональная библиотека.Он добавляет классы для получения почты с использованием различных протоколов.Это зависит от SmtpCore.dll и других DLL.Его клиенты будут зависеть от Mail.dll и SmtpCore.dll.

Второй ответ: нет , вы снова используете шаблон фасада, и ваш фасад охватывает несколькобиблиотеки DLL.

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