Я так думаю об этом, любой элемент управления / класс должен отвечать за настройку себя и общедоступного интерфейса своих непосредственных потомков.Пользователь класса или элемента управления не должен знать своих родителей или внутренних знаний о его дочерних элементах.
Итак, в вашем примере оранжевые элементы управления должны подписаться на события зеленых элементов управления и действовать соответственно,возможно, поднятие своего собственного события для родителя и / или, возможно, влияние какого-либо поля на элемент управления «родной зеленый».Когда зеленые элементы управления добавляются и удаляются из оранжевого, оранжевый элемент управления отвечает за поддержание внутренней «проводки».Это верно независимо от того, происходило ли это в публичном или приватном методе на оранжевом, если хост способен сделать это через некоторую открытую коллекцию на оранжевом, логика для этого должна быть заключена в оранжевый.true, независимо от того, рассматриваем ли мы оранжевый, хост, зеленый или любой другой класс / элемент управления.
В плане кодирования вы захотите использовать +=
и -=
с моделью подписчика Multicast Delegate \ Eventкогда элементы управления добавляются и удаляются.Обработчики будут закодированы соответствующим образом.