Модераторы: Се ля ви
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инициализация компонентов программы. Общий подход. Инициализация экземпляров классов 
:(
    Опции темы
shizoid
Дата 5.9.2013, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



Практически любое приложение, должно инициализировать свои компоненты. Столкнулся в своей практике с задачей загрузки настроек из json формата и инициализацию компонент приложения. В ходе работы изобрел нечто похожее на паттерн Строитель, если я не ошибаюсь. Суть в том ко всем компонентам есть класс Configurator(Builder), который знает как извлечь необходимую информацию из json объекта и , если потреубется изменить формат(например  xml) - добавлю новый класс конфигуратор, если изменится логика в документе - внесу изменения в класс конфигуратор. Примеры на С++.
Код

class ComponentBase{
public:
    ComponentBase(const int param1=0);            //Конструктор отвечает за логику класса
    int GetParam() const;                        //геттер
    void SetParam(const int val);                      //Установка параметров
    void DoSome();                                //логика
private:
    int m_param1;
};

class JSONConfigurator:public ConfiguratorBase{
public:
    JSONConfigurator(const JSON::Object* obj);
    void Configure(ComponentBase& component) throw (std::logic_error); //вывалит эксепшен если настроить компонент не получится 
private:
    shared_ptr<JSON::Object> m_cfg_data;
};

class XMLConfigurator:public ConfiguratorBase{
public:
    XMLConfigurator(const XML::Node* obj);
    void Configure(ComponentBase& component) throw (std::logic_error); //вывалит эксепшен если настроить компонент не получится 
private:
    shared_ptr<XML::Node> m_cfg_data;
};


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

Код



class ComponentBase{
public:
    ComponentBase(const int param1=0);            //Конструктор отвечает за логику класса
    ComponentBase(const JSON::Object* obj);    //Инициализация из json
    ComponentBase(const XML::Node* node);        //Инициализация из xml
    int GetParam() const;                        //геттер
    void SetParam(const int val);                //Установка параметров
    void DoSome();                                //логика
private:
    int m_param1;
};



Рассудите пожалуйста. Желательно книжку или статью какую-то привести.

Это сообщение отредактировал(а) shizoid - 5.9.2013, 15:02
PM MAIL   Вверх
Google
  Дата 23.5.2019, 13:47 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Системный анализ, проектирование и UML"
Се ля ви

Форум "Системный анализ, проектирование и UML" предназначен для обсуждения вопросов, так или иначе связанных с этапами жизненного цикла автоматизированных (программных, информационных, автоматических) систем:

• предпроектные обследования объектов автоматизации;

• разработка концепции создания систем;

• моделирование бизнес-процессов (в т.ч. на UML);

• проектирование архитектуры систем;

• управление проектами;

• управление качеством;

• CASE-средства;

• реинжиниринг.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Се ля ви.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Системный анализ, проектирование и UML | Следующая тема »


 




[ Время генерации скрипта: 0.1229 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.