Фон :
Изобразите художественное произведение формы, в которой есть несколько уровней вложенных фигур. Изменение свойств, например Площадь и длина любой из этих фигур внутри фигуры приведут к изменению всех связанных свойств и форм.
У меня есть шаблон дизайна, который выглядит так:
У меня есть объектный граф, называемый (для обсуждения) "NestedShapes", который имеет множество свойств, связанных друг с другом, например, "Площадь" и "Длина". Но график спроектирован так, чтобы быть тупым, то есть с учетом любого значения он не знает, как рассчитать другое, и не будет этого делать.
Вместо этого граф может быть присоединен к GraphManager, который берет в своем конструкторе корневой узел верхнего уровня IRootShape.
NestedShapes реализует IRootShape, который также реализует INotifyPropertyChanged. GraphManager подписывается на эти изменения свойств и запускает логику для вычисления связанных полей и установки графика в правильное состояние с помощью IRootShape.
Задача :
Наряду с IRootShape у меня есть IShape, ISquare, ICircle и т. Д., Которые являются реальными интерфейсами C #. Но проблема в том, что для некоторых из этих свойств я хочу, чтобы у них были только сеттеры, которые являются частными для GraphManager. Я знаю, что реализующая форма все еще может предоставлять общедоступный установщик, но я не хочу, чтобы обязательно представлял их на стороне пользовательского интерфейса, чтобы иметь возможность установить свойство из GraphManager. Что я должен делать? Базовые классы с внутренним набором пути?