У вас есть советы о том, как обернуть внутреннюю библиотеку, чтобы доставить ее клиенту? - PullRequest
1 голос
/ 20 августа 2010

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

Это включает в себя как кроссплатформенный код (например, класс потока, заключающий в себе либо Win32, либо pthread API), так и каждый специфический для компании код (например, классы для обработки собственного протокола связи между нашими серверами и нашими клиентскими приложениями).

Нам необходимо доставить часть этих функций клиенту, который согласен использовать те же параметры компилятора и компилятора, что и в библиотеке.

В настоящее время мой дизайн направлен на то, чтобы каждая версия нашей библиотеки имела бинарный интерфейс, совместимый с предыдущими:

  1. Доставка библиотеки DLL / SO
  2. Использование простых и понятных соглашений об именах (вдохновлено Java camelCaseNaming и т. Д.)
  3. Использование STL
  4. Использование глобального пространства имен (и префикс любого макроса с не двусмысленным именем, чтобы избежать конфликта имен)
  5. Выбор всех классов, которые необходимо использовать
  6. Кислородная обработка всего (и предоставление «публичной части» клиенту)
  7. Упрощение и унификация наших интерфейсов
  8. В наших классах PImpl нет виртуальных методов
  9. Нет встроенного кода, за исключением исключения (даже константы являются экспортированными значениями констант, определены в скомпилированном источнике и просто объявлены в общедоступном заголовке)
  10. Исключительный встроенный код для служебных / косвенных функций без большого количества кода внутри (например, функция подкачки была бы встроенной, вызывая не встроенный метод подкачки объекта, который она обменивает)
  11. Исключительный встроенный код для некоторых простых «классов значений» без реального кода, чтобы избежать ненужных накладных расходов (например, класс комплексных чисел будет встроен)
  12. Предложение высокоуровневых сервисов (о которых описываются классы PImpl-ed) через встроенный код (то есть клиент может повторно использовать / модифицировать его для своих нужд)

Мой список полон, или я что-то упустил, что упростило бы дальнейшее обслуживание / развитие?

Является ли один из моих пунктов ошибкой?

1 Ответ

0 голосов
/ 20 августа 2010

Фасадный рисунок

Я использовал его для создания "программных интерфейсов" для больших подсистем. Создайте один или несколько в зависимости от необходимости.

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