Здравствуйте, 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. Спасибо за конструктивный диалог!