Конструктор с десятком параметров
От: Аноним  
Дата: 07.04.14 10:31
Оценка:
В общем, как-то само собой, как отражение объективной реальности, появилось в коде такое чудо.
Объективная реальность следующая: класс, инкапсулирующий узлы XML. Некоторые узлы содержат достаточно большое количество различных аттрибутов (большинство из которых являются опциями, задающими поведение или настройки). Ну и, получилось в итоге как-то громоздко и не очень красиво. Просьба покритиковать такое решение, и какие есть альтернативные варианты?
Re: Конструктор с десятком параметров
От: night beast СССР  
Дата: 07.04.14 10:44
Оценка: 2 (1)
Здравствуйте, Аноним, Вы писали:

А>В общем, как-то само собой, как отражение объективной реальности, появилось в коде такое чудо.

А>Объективная реальность следующая: класс, инкапсулирующий узлы XML. Некоторые узлы содержат достаточно большое количество различных аттрибутов (большинство из которых являются опциями, задающими поведение или настройки). Ну и, получилось в итоге как-то громоздко и не очень красиво. Просьба покритиковать такое решение, и какие есть альтернативные варианты?

вынести настройки в отдельный класс с публичными полями?
дефаултовый конструктор заполняет поля значениями по умолчанию а по мере чтения изменяет их.
Re: Конструктор с десятком параметров
От: jahr  
Дата: 07.04.14 10:45
Оценка:
Здравствуйте, Аноним, Вы писали:


А>какие есть альтернативные варианты?

Самое очевидное — отдельный класс для работы с аттрибутами-настройками, экземпляр которого и отдается в конструктор.
Re: Конструктор с десятком параметров
От: alpha21264 СССР  
Дата: 07.04.14 10:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>В общем, как-то само собой, как отражение объективной реальности, появилось в коде такое чудо.

А>Объективная реальность следующая: класс, инкапсулирующий узлы XML. Некоторые узлы содержат достаточно большое количество различных аттрибутов (большинство из которых являются опциями, задающими поведение или настройки). Ну и, получилось в итоге как-то громоздко и не очень красиво. Просьба покритиковать такое решение, и какие есть альтернативные варианты?

Ну я бы массив сделал.
Поскольку атрибуты скорее всего имеют один и тот же тип (строку).
И не важно, что потом они превращаются (например) в энумы.
Это можно сделать уже внутри конструктора.

Течёт вода Кубань-реки куда велят большевики.
Re: Конструктор с десятком параметров
От: B0FEE664  
Дата: 07.04.14 11:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>В общем, как-то само собой, как отражение объективной реальности, появилось в коде такое чудо.

А>Объективная реальность следующая: класс, инкапсулирующий узлы XML. Некоторые узлы содержат достаточно большое количество различных аттрибутов (большинство из которых являются опциями, задающими поведение или настройки). Ну и, получилось в итоге как-то громоздко и не очень красиво. Просьба покритиковать такое решение, и какие есть альтернативные варианты?

Мой опыт отражения объективной реальности показывает, что с течением времени атрибуты у объектов имеют свойство исчезать и появляться в новых версиях XML-файлов. Готовы ли вы поддерживать каждое такое изменение в конструкторе класса?

Мне нравится такой синтаксис:
XMLElem oElem("something");

oElem.SetAttibute("asdf",   "ghjk")
     .SetAttibute("qwerty", "uiop")
     .SetAttibute("zxcv",   "bnm");
И каждый день — без права на ошибку...
Re: Конструктор с десятком параметров
От: Sashaka Россия  
Дата: 08.04.14 12:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>В общем, как-то само собой, как отражение объективной реальности, появилось в коде такое чудо.

А>Объективная реальность следующая: класс, инкапсулирующий узлы XML. Некоторые узлы содержат достаточно большое количество различных аттрибутов (большинство из которых являются опциями, задающими поведение или настройки). Ну и, получилось в итоге как-то громоздко и не очень красиво. Просьба покритиковать такое решение, и какие есть альтернативные варианты?

boost::property_tree
Re: Конструктор с десятком параметров
От: rg45 СССР  
Дата: 10.04.14 15:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А>В общем, как-то само собой, как отражение объективной реальности, появилось в коде такое чудо.


Наверняка часть из из этих параметров не являются обязательными, так? Я в этом случае в конструкторе оставляю только обязательные параметры. А для остальных предоставляю набор сеттеров, позволяющих делать инициализацию по принципу конвейера:

  phone_book.add_record(Record(id).set_name(name).set_phone(phone).set_email(email));
--
Справедливость выше закона. А человечность выше справедливости.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.