Re[7]: Refactoring: Extract Class
От: Аноним  
Дата: 13.11.04 13:59
Оценка:
Здравствуйте, A.J., Вы писали:

AJ>Ты хочешь сказать у тебя параметры еще и динамические (т.е. во время работы программы кол-во параметров может меняться?).

Для НУ системы (речь идет о распределенной АСУТП) кол-во параметров не меняется (смысл динамически заводить там новые параметры, если мы не знаем что потом с ними делать?). А собственно все, о чем шла речь выше это НУ.
А вот для ВУ системы помимо well-known параметров должна быть возможность получать доступ к заранее неизвестным параметрам. Т.е. для ВУ параметры действительно являются динамическими.

AJ>2) Делаешь класс CommonParams, обязанность которого — предоставлять доступ к общим параметрам, и в нем тоже методы add/remove/has/get/setParam(id). В принципе, если у тебя всего один набор общих параметов, его лучше сделать синглтоном.

Один набор общих параметров для одного экземпляра ControlObject (ну и его Alg-ов). На самом дела программа управляет более чем одним объектом (несколько экземпляров ControlObject) и singleton здесь не нужен.

AJ>Как видишь получилась вариация твоего третьего варианта, с вытекающими (описанными тобой) неудобствами.

Получается что так

AJ>В следующем дизайне я постарался свести эти неудобства к минимуму:

В общем-то именно такая картина у меня в голове и вырисовывалась. Приятно, что не только у меня

AJ>Всё что относится к управлению параметрами, вынесено в отдельный абстрактный класс ParameterManager.

Либо так, либо как альтернатива, делать конкретный ParameterManager и "заливать" туда информацию о всех параметрах к которым мы хотим иметь доступ по их Id. В этом случае избавляемся от необходимости итерировать Alg-и для поиска параметра. Соот-но отношение наследования меняется на однонаправленные ассоциации.

AJ>И еще, я бы серьезно подумал, чтобы разделить controlObject на два — один контроллер и один представляющий состояние контролируемого объекта.

Ок. Сейчас закончу эту итерацию рефакторинга и попробую прикинуть как это будет выглядеть (разделение).


P.S. Спасибо за конструктивный диалог!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.