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

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

Страниц: [1] 2 3 4   Вниз
  Печать  
Автор Тема: Класс настроек  (Прочитано 21447 раз)
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« : Сентябрь 16, 2014, 08:57 »

Как правильно реализовать сабж?
Настройки должны отображаться в окне настроек, их используют разные модули программы. Singletone? MVC?
Записан
vizir.vs
Гость
« Ответ #1 : Сентябрь 16, 2014, 09:47 »

Вариант с синглтоном мне нравится больше. Что за MVC - Model Viewer Controller? а как он здесь связан? Второй вариант через наблюдателя. Но тогда надо все классы наследовать от наблюдателя и определять соответствующие методы.

P.S. если у тебя настройки меняются и тебе потом надо рассылать обновления, то это либо через наблюдателя, либо синглтоно, но нужно слать сигналы всем окнам, чтобы они обновили инфу о настройках.
« Последнее редактирование: Сентябрь 16, 2014, 10:51 от vizir.vs » Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #2 : Сентябрь 16, 2014, 10:58 »

Делаешь класс на базе QObject с сигналом changed(), с сохранением в реестр/ini по методу commit(). Далее, зависит от архитектуры твоего приложения, или делаешь синглтоном объект этого класса или раздаешь указатель на него всем заинтересованным окнам, объектам.

В общем-то, если у тебя будет отдельное приложение - то скорее всего можно использовать синглтон. Если разделяемая библиотека, то однозначно надо тянуть указатель.
Записан

Гугль в помощь
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #3 : Сентябрь 16, 2014, 15:59 »

Если разделяемая библиотека, то однозначно надо тянуть указатель.
Чёоо Шокированный
В библиотеках нельзя использовать синглтоны? Или объявлять?
Записан
Alexu007
Гость
« Ответ #4 : Сентябрь 16, 2014, 19:28 »

Сделать переменные настроек глобальными, меню настройки пусть их меняет, а разные модули программы только читают. В чём проблема?  Смеющийся
Записан
vizir.vs
Гость
« Ответ #5 : Сентябрь 17, 2014, 09:29 »

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

Задача синглтона сделать класс легкодоступным всем и при этом гарантировать единственность этого класса. А если ты сделаешь просто глобальную переменную кто угодно может ее создать или скопировать, но настройки то должны быть одни для всей программы! И не должно быть возможность создать еще одну переменную настроек или скопировать существующие.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Сентябрь 17, 2014, 09:42 »

Сделать переменные настроек глобальными, меню настройки пусть их меняет, а разные модули программы только читают. В чём проблема?  Смеющийся
В какой-то момент приходит неприятное ощущение "бардака", обнаруживается что разрозненных переменных уже слишком много и надо с ними что-то делать. Ну это конечно когда проект разрастется.
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #7 : Сентябрь 17, 2014, 09:50 »

Если разделяемая библиотека, то однозначно надо тянуть указатель.
Чёоо Шокированный
В библиотеках нельзя использовать синглтоны? Или объявлять?
Плохой дизайн. Постоянно сталкиваюсь с такими говно-либами, которые черта с два запустишь в многопоточной среде, к примеру. Синглтон накладывает серьезное ограничение на способ использования твоего кода, в случае с приложением это простительно, а в случае с библиотекой нельзя сказать точно как она будет использоваться в том или ином проекте.
Записан

Гугль в помощь
Bepec
Гость
« Ответ #8 : Сентябрь 17, 2014, 10:21 »

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

Это приводит к тому, что библиотека будет пользоваться ТОЛЬКО так, как и задумывалось.
Что с одной стороны правильно - неправильно её использовать будет почти невозможно Веселый
С другой стороны - приложение, её использующее должно соответствовать определённым требованиям.

Правильный синглтон не обращает внимание на такие мелочи как "многопоточность". Но это уже заслуга его автора и продуманности архитектуры Веселый

PS плохой дизайн это как раз куча глобальных переменных хрен знает откуда меняющихся и использующихся. В случае с синглтоном можно довольно просто исправить ситуацию, имея его определение Улыбающийся
Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #9 : Сентябрь 17, 2014, 10:34 »

Если разделяемая библиотека, то однозначно надо тянуть указатель.
Чёоо Шокированный
В библиотеках нельзя использовать синглтоны? Или объявлять?
Плохой дизайн. Постоянно сталкиваюсь с такими говно-либами, которые черта с два запустишь в многопоточной среде, к примеру. Синглтон накладывает серьезное ограничение на способ использования твоего кода, в случае с приложением это простительно, а в случае с библиотекой нельзя сказать точно как она будет использоваться в том или ином проекте.
Так значит все-таки объявлять...
Аргументы либо притянуты, либо далеки от контектста:
> Плохой дизайн
  если только неграмотная реализация синглтона...
> в многопоточной среде
  настройки в отдельном потоке? оно надо?
> Синглтон накладывает серьезное ограничение на способ использования
  так ведь в этом его предназначение. Одиночка она и в приложении и в библиотеке одиночка

ЗЫ. Ой, Верес опередил.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Сентябрь 17, 2014, 11:00 »

Ну давайте копнем, что ли (а то много общих слов  Улыбающийся). Корректна ли такая реализация ?

Код
C++ (Qt)
MySingle * MySingle::mInstance = 0;
 
MySingle * MySingle::Instance( void )
{
static QMutex mutex;
if (!mInstance) {
 QMutexlocker lock(&mutex);
 mInstance = new MySingle;
}
return mInstance;
}
Записан
OKTA
Гость
« Ответ #11 : Сентябрь 17, 2014, 11:13 »

Хм, я бы поставил QMutexLocker перед if. А так, подозрений не вызывает)
Записан
Bepec
Гость
« Ответ #12 : Сентябрь 17, 2014, 11:20 »

++ убрать перед if. На первый взгляд нормальная архитектурка.

Записан
kai666_73
Крякер
****
Offline Offline

Сообщений: 319


Просмотр профиля
« Ответ #13 : Сентябрь 17, 2014, 11:37 »

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

А если так?
Код:
QScopedPointer<MySingle> MySingle::m_instance(new MySingle());
MySingle *MySingle::instance() {
    return m_instance.data();
}
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #14 : Сентябрь 17, 2014, 11:38 »

А про стандарт с++11 кто-нить вообще слышал?  Подмигивающий
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Страниц: [1] 2 3 4   Вверх
  Печать  
 
Перейти в:  


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