Проектирование фронтенд / бэкэнд системы в C ++? - PullRequest
2 голосов
/ 23 августа 2010

Я собираюсь написать программу на C ++, но я не уверен, как это сделать.Я хочу создать программу, которую можно использовать с интерфейсом командной строки, но также с интерфейсом GUI, так как я не хочу привязывать пользователя к определенному интерфейсу, такому как набор инструментов виджета, ради зависимости.Как лучше всего это сделать?Я знаю, что некоторые программы, такие как RSync и SSH, имеют интерфейсы в графическом интерфейсе, но я не уверен, как это сделать.Разве не было бы глупо иметь программу, которая просто использует system () для запуска всего этого, имея симпатичный графический интерфейс?

Ответы [ 4 ]

7 голосов
/ 23 августа 2010

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

Затем вы можете написать несколько приложений, использующих эту библиотеку, одно из которых реализует интерфейс GUI, а другое - интерфейс командной строки. Они включают заголовки и компилируются с API, и вы связываете библиотеку с ним.
Будьте осторожны, чтобы не скомпилировать библиотеку и графический интерфейс с несогласованными настройками.

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

6 голосов
/ 23 августа 2010

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

Более сложные ответы включают настройку вашего бэкенда в качестве демона / сервера.

Вам не нужны системные вызовы, чтобы делать что-либо из этого (если у вас нет особых требований).

1 голос
/ 23 августа 2010

Вы можете вдохновиться дизайном MVC. Различными интерфейсами являются виды на модель-контроллер. Контроллер может быть библиотекой, которая будет учитывать общие задачи вашего приложения. Часть GUI и часть оболочки (или другая часть интеграции языка, например) все используют эту «безголовую» библиотеку. Четкое разделение с самого начала поможет обеспечить модульность и разделение.

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

Вы можете использовать QT для интерфейса GUI.Но я бы сначала написал вашу библиотеку.Тогда сделайте свой графический интерфейс последним.

Несколько полезных советов

  1. Обязательно пишите модульные тесты, пока пишете код.

  2. Обязательно используйте кодинструмент покрытия для оценки ваших модульных тестов при написании кода.

  3. Обязательно избегайте типов BOOL, поскольку они обычно определяются в API платформы (например, win32).Используйте вместо этого bool.

  4. Форвард объявить столько типов, сколько вы можете в заголовочных файлах.Включите как можно меньше заголовочных файлов в каждый заголовочный файл библиотеки.

  5. Предоставьте как можно меньший интерфейс.

  6. Обязательно соблюдайте правилапрактика кодирования для с ++. Стандарты кодирования Herb Sutters Book C ++ превосходны в этом отношении.

  7. Как только вы напишите свой графический интерфейс, добавьте как можно меньше бизнес-логики в обработчики событий GUI.По сути, вы хотите, чтобы ваша библиотека была независимой от вашего графического интерфейса.Кто-то еще упомянул паттерн MVC здесь.Это отличный совет.

...