Russian Qt Forum
Ноябрь 24, 2024, 16:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 32 33 [34] 35 36 ... 88   Вниз
  Печать  
Автор Тема: Создаю библиотеку для работы с последовательными портами. [УШЕЛ ИЗ ПРОЕКТА].  (Прочитано 786463 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #495 : Июнь 23, 2011, 08:40 »

Только я бы добавил еще промежуточные классы типа "Engine", т.к. такой подход скрывает в реализации "serialport.cpp" платформо-зависимые типы данных и т.п.

Я ниже приаттачил два примера scope_bad и scope_ok, которые демонстрируют этот подход.

В примере scope_bad (который аналогичен нашему текущему подходу) переменные Windows видны в "base.cpp" , что НЕ ПРАВИЛЬНО! Имхо.

В примере же  scope_ok любые платформо зависимые типы данных скрыты через класс BaseEngine, что ПРАВИЛЬНО!
Этот подход был ранее в библиотеке и выполнен.
Также, этим пользуются повсеместно тролли в Qt!

ИМХО, я бы не стал упрощать всё до такой степени как предлагает b-s-a!
Я за оставление структуры от версии "master".
« Последнее редактирование: Июнь 28, 2011, 14:34 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
b-s-a
Гость
« Ответ #496 : Июнь 23, 2011, 08:42 »

1. Почему ты сменил каталог src на lib?
мне показалось более логичным разместить в lib. Так как потом еще будет tests, examples...
2. Зачем ты в serialport.cpp/serialportinfo.cpp
добавил дефайны и подключаешь приватные заголовки?
Код
C++ (Qt)
#ifdef Q_OS_WINDOWS
# include "serialport_p_win.h"
#elif defined(Q_OS_UNIX)
# include "serialport_p_unix.h"
#else
# error Unsupported Operating System
#endif
 
Имхо, это не правильно. Реализация в serialport.cpp ничего не должна знать об платформо зависимых вещах.
На то и MR существуют - не нравится, отклоняешь
3. Почему убрал *.pri файл?
Я поменял тип проекта на subdirs - т.е. будет куча независимых подпроектов.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #497 : Июнь 23, 2011, 08:48 »

b-s-a (а также остальные заинтересованные лица), почитай(те) и выскажись(тесь) по тем доводам которые я привел выше про область видимости.
Записан

ArchLinux x86_64 / Win10 64 bit
asvil
Гость
« Ответ #498 : Июнь 23, 2011, 10:09 »

Ссылочки на MR скидывайте пожалуйста.

Встряну по поводу файловой структуры. Всячески агитирую за nix-style с помесью qt.
Код:
bin - binary
lib - binary
etc - text configs
share - shareable objects
  `translations
  `images
src - sources of modules
  `modules
  `examples
  `tests

Исчезновение *pri сводит на нет возможность вкомпиливания в приложение библиотеки. Нет ну можно конечно выкрутить статической библиотекой.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #499 : Июнь 23, 2011, 10:22 »

Цитировать
Ссылочки на MR скидывайте пожалуйста.
http://gitorious.org/qserialdevice/qserialdevice/merge_requests

Цитировать
Исчезновение *pri сводит на нет возможность вкомпиливания в приложение библиотеки. Нет ну можно конечно выкрутить статической библиотекой.
Люто плюсую Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #500 : Июнь 23, 2011, 10:24 »

>>А как мне склонировать ветку 2.0? А то клонирую мастера постоянно.
да в принципе ни как, клонируется всё хранилище. Тебе просто нужно из твоего локального клона извлечь рабочие файлы.
Записан

Юра.
b-s-a
Гость
« Ответ #501 : Июнь 23, 2011, 10:26 »

b-s-a (а также остальные заинтересованные лица), почитай(те) и выскажись(тесь) по тем доводам которые я привел выше про область видимости.
Не вижу смысла усложнять структуру и увеличивать потребление ресурсов ради убирания из области видимости реализации платформозависимых элементов. Тот же QFile содержит такое усложнение из-за использования общих с другими классами элементов. А вот, например, QSettings сделан иначе.
Цитировать
Исчезновение *pri сводит на нет возможность вкомпиливания в приложение библиотеки. Нет ну можно конечно выкрутить статической библиотекой.
Никто не мешает выделить pri из pro. Я как-то не подумал, что библиотека будет использоваться таким образом.
Я против включения  в репозиторий каталогов сборки и готовых файлов. Я, например, всегда пользуюсь теневой сборкой, чтобы не захламлять исходники.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #502 : Июнь 23, 2011, 10:33 »

Что скажут остальные?
Записан

ArchLinux x86_64 / Win10 64 bit
asvil
Гость
« Ответ #503 : Июнь 23, 2011, 10:34 »

Я не про каталоги сборки говорю, я уже упоминал, когда cmake правил, что бибилотека не должна знать куда ей собираться, это решает хост-проект. Я говорю о смысле именования папок.

Таки все пользуются теневой сборкой. Однако, когда программе надо загрузить переводы\кофиги\картинки, придумана структура для того, чтобы результирующие бинарники всегда знали где что лежит.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #504 : Июнь 23, 2011, 10:43 »

>>Никто не мешает выделить pri из pro.
вот и выделите его сразу.

>>Я против включения  в репозиторий каталогов сборки и готовых файлов.
pri-файл к ним никакого отношения не имеет.
Записан

Юра.
b-s-a
Гость
« Ответ #505 : Июнь 23, 2011, 10:48 »

>>Я против включения  в репозиторий каталогов сборки и готовых файлов.
pri-файл к ним никакого отношения не имеет.
я говорил уже о другом - лень было процитировать часть исходного сообщения.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #506 : Июнь 23, 2011, 10:50 »

Ну так об области видимости кто-нить что-нить выскажет ещё?
Или я не дождусь...

ЗЫ: Хотелось бы "услышать" ещё тов. BRE и Rcus
Записан

ArchLinux x86_64 / Win10 64 bit
Rcus
Гость
« Ответ #507 : Июнь 23, 2011, 11:30 »

То есть с одной стороны пара условных секций для определения платформозависимых полей и инициализации в общем конструкторе. При этом структура довольно проста, но не позволяет иметь несколько реализаций порта в одной сборке (невелика потеря с моей точки зрения, но может пригодиться при работе с FT232 через её API, а не VCP драйвер). А расширение видимости платформенных определений в общую часть приватного класса - небольшая цена за простоту (главное что это не проникает в public header).
С другой стороны вызов проходит через Base::method -> BasePrivate::method -> BaseEngine::method -> BaseEnginePrivate::method от кого скрываемся так сказать?
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #508 : Июнь 23, 2011, 11:40 »

Цитата: Rcus
главное что это не проникает в public header
Т.е. если приникает в базовую реализацию base.cpp - то и фик с ним?

Rcus, так, всё-таки, каков твой вердикт?
Записан

ArchLinux x86_64 / Win10 64 bit
BRE
Гость
« Ответ #509 : Июнь 23, 2011, 11:43 »

Согласен с камрадами по поводу избыточности такого скрывания (рекурсивно так можно уйти очень глубоко).  Улыбающийся
Приватные классы и сама реализация все равно доступна только разработчику, так для чего и от кого что прятать?
« Последнее редактирование: Июнь 23, 2011, 11:44 от BRE » Записан
Страниц: 1 ... 32 33 [34] 35 36 ... 88   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.131 секунд. Запросов: 23.