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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Вопрос стиля  (Прочитано 7994 раз)
blood_shadow
Гость
« : Май 08, 2011, 14:21 »

Программа выросла до 80 файлов и вот теперь стоит дилемма:
если мне не обходимо создать модель в которой только чтение, сабклассить представление
и создать делегат в котором я переопределяю только пеинт
Конечно было бы удобнее все поместить в один хедер(все объявления) чтоб потом не вспоминать
что где лежит.

Вопрос - как лучше сделать запихнуть модель/делегат/представление в один
хедер или все-таки какими они маленькими не были заводить для каждого отдельный файл?
Записан
alexman
Гость
« Ответ #1 : Май 08, 2011, 16:59 »

Сталкивался с подобным: хранил сначала в одном файле, но по мере роста проги станавилось не удобно по файлу "ползать", поэтому все разделил...
Записан
blood_shadow
Гость
« Ответ #2 : Май 08, 2011, 17:06 »

Сталкивался с подобным: хранил сначала в одном файле, но по мере роста проги станавилось не удобно по файлу "ползать", поэтому все разделил...
наверно и я буду разделять, модель начинает стремительно расти  Улыбающийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Май 10, 2011, 09:48 »

ИМХО, для каждого класса отдельный хедер.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ieroglif
Гость
« Ответ #4 : Май 10, 2011, 10:05 »

для каждого класса веду отдельные h/cpp файлы, ничего не миксую, все enums выношу в отдельный enums.h и объявляю их внутри своего namespace. разбиваю все классы по неким смысловым группам, раскладываю их по папкам, в каждую папку свой pri файл
на каждую папку свой namespace
сейчас у меня около 70и файлов, организация такая:

Цитата: Кусок из документации для себя
7. пространства имён, схема взаимодействия классов и объектов между ними.
    AUTH - классы, отвечающие за управление пользователями системы, прав доступа
    пространство предоставляет:......................

    GUI - классы внешнего вида.
        пространство имён имеет интерфейсный класс GUI::IWidget, наследуемый от AUTH::AuthObject
        ..................................

    MVC - отдельное пространство для классов моделей и делегатов. классы отсюда тесно дружат с DB
        .............

    DB - работа с базами данных
        предоставляет методы
        ..................
        так как это один класс со статическими методами, то его файл лежит в MVC =)

    CORE - классы ядра. тут пока что не ясно что =) в будущем может замениться на SCRIPT

таким образом я нигде не путаюсь, знаю в каком неймспейсе у меня что лежит..
по необходимости создаю заголовочный файл с именем нейма, в котором у меня подключено то, что надо "во вне" (к примеру #include "auth/auth.h"Подмигивающий
веду своё соглашение о наименовании классов, файлов, переменных
в итоге надо соблюдать некоторые правила, но код становится достаточно удобночитаемым и разбираемым даже когда разрастается, и даже сторонними программистами! =)
мало того, при таком подходе даже я сам легко разбираюсь в своём коде годичной-двухгодичной давности =))
Записан
blood_shadow
Гость
« Ответ #5 : Май 10, 2011, 12:40 »

веду своё соглашение о наименовании классов, файлов, переменных
а можно насчет этого подробнее, особенно соглашение наименования классов и файлов интересует
Записан
ieroglif
Гость
« Ответ #6 : Май 10, 2011, 13:28 »

веду своё соглашение о наименовании классов, файлов, переменных
а можно насчет этого подробнее, особенно соглашение наименования классов и файлов интересует
я для себя веду такое соглашение:

Цитата: из головы
2. класс именуется конкретно своим функционалом, первая буква обязательно заглавная
    пример: Core, DBElements, ModelElements, Element

3. префиксы классов, если необходимы:
    I - класс интерфейс.
    DB - DataBase - класс базы данных
    M - модель для вьюшек. (обновлено с момента введения GUI::MVC, до этого Model)
    W - класс, имеющий виджет
    ID - ItemDelegate - класс для делегатов вьюшек

4. наименования функций:
    все функции за исключением конструктора и деструктора начинаются с маленькой буквы
    в функции, состоящей из нескольких слов кажое слово начинается с заглавной буквы
        пример: setColor() setMaximumSize()
    функции, что-либо передающие в класс начинаются с префикса set и имеют тип void
    функции, возвращающие какое-либо состояние класса начинаются с префикса get
    функции, обрабатывающие переменную по get/set называются так же как и переменная
        пример: int color; void setColor(); int getColor();

5. наименования переменных
    все переменные начинаются со строчной буквы.
    в переменной, состоящей из нескольких слов кажое слово начинается с заглавной буквы
        пример: dbElements (переменная для объекта класса DBElements)
    переменная, определяющая объект имеет такое же название, как и класс объекта (по возможности, конечно =))
    внешняя переменная, совпадающая по названию с внутренней начинается с "_"
        пример: void setInt(int _i) { i = _i; };
    любая переменная - private.
    если у переменной описаны set/get методы - она должна быть описана через Q_PROPERTY макрос
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Май 10, 2011, 13:31 »

Цитировать
  внешняя переменная, совпадающая по названию с внутренней начинается с "_"
Хреново. Так делать не рекомендуется.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ieroglif
Гость
« Ответ #8 : Май 10, 2011, 13:32 »

Цитировать
  внешняя переменная, совпадающая по названию с внутренней начинается с "_"
Хреново. Так делать не рекомендуется.
как ты делаешь?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Май 10, 2011, 13:35 »

Я использую подчеркивание в конце, т.е. someElement_. Начальное подчеркивание зарезервировано за макросами.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Май 10, 2011, 13:46 »

По поводу имен файлов. Как только проект разрастается, "слишком общие" имена файлов приходится менять. Примеры

Utils.h   // вероятно др. подзадача тоже потребует каких-то "утилей"
Matrix.h  // хорошие шансы что какая-то сторонняя либа тоже придет с Matrix.h

Лучше сразу зарядить "префикс" чтобы показать к какой подзадаче в проекте это относится, напр

UI_Utils.h
TR_Matrix.h

Ну и не надо слишком серьезно воспринимать рекомендации (мои - тоже). Руководствуйтесь здравым смыслом  Улыбающийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Май 10, 2011, 13:49 »

ИМХО, файлы лучше в нижнем регистре именовать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
blood_shadow
Гость
« Ответ #12 : Май 10, 2011, 14:26 »

    если у переменной описаны set/get методы - она должна быть описана через Q_PROPERTY макрос
[/quote]
а зачем это делать? это только для того чтобы свойства в дизайнере появились или по каким-то
еще другим соображениям?
Записан
alexman
Гость
« Ответ #13 : Май 10, 2011, 14:32 »

    если у переменной описаны set/get методы - она должна быть описана через Q_PROPERTY макрос
а зачем это делать? это только для того чтобы свойства в дизайнере появились или по каким-то
еще другим соображениям?
[/quote]
Для QStateMachine, например.
Записан
ieroglif
Гость
« Ответ #14 : Май 10, 2011, 17:59 »

Я использую подчеркивание в конце, т.е. someElement_. Начальное подчеркивание зарезервировано за макросами.

отличная идея =) перехожу на этот метод =)
+1 к именам файлов в нижнем регистре.
а на тему наименований типа UI_Utils - у меня бы это лежало в двух разных папках: UI и SCRIPTS (к примеру), эти классы бы были в разных неймспейсах UI::Utils и SCRIPTS::Utils соответсвенно, и, скорее всего, не предоставлялись бы пространством имён "во вне" ибо зачем внутренние утилиты группы классов выдавать другой группе классов? =)

Q_PROPERTY действительно постоянно использую для QStateMachine - на нём практически весь гуй пишется =) + подключаются иногда управления моделями. Что ещё забавно - возможность использования Q_PROPERTY макроса для "псевдо свойства" - у него есть только WRITE метод, зато этот метод вызовется когда гуй войдёт в какой-то определённый QState =) таким образом запускать какие-то фоновые задачи. к примеру, если программу перевели в QState XXX - запустить функцию обновления каких-то данных =)
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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