Каков подходящий шаблон проектирования для этой иерархической структуры классов? - PullRequest
0 голосов
/ 23 сентября 2011

У меня есть класс, который создает иерархию классов. Интерфейс должен скрывать всю внутреннюю иерархию, представляя единственную ссылку на класс. (Интерфейс для классов на промежуточных уровнях должен скрывать внутренние детали реализации таким же образом.) У меня возникли небольшие трудности с принятием решения о том, как передавать параметры интерфейса до самых низких уровней и передавать изменения состояния до верхнего уровня. То, что я придумал, становится грязным.

Я видел некоторые обсуждения классной доски , но из того, что я видел, он выглядит нерегулярным и плоским, а не иерархическим. (Хотя плоские и иерархические могут быть не важны.)

Класс, который я имею, представляет собой представление календаря, подкласс UIView. Иерархия включает в себя класс заголовка, класс сетки (создается более одного раза), класс плиток (создается много раз), а также некоторые вспомогательные классы. Он основан на кал-календаре Кейта Лазуки в Objective C. Я решил реорганизовать его в соответствии со своими потребностями и хотел переосмыслить эту часть, прежде чем вносить проблемы с гибкостью.

Мой вопрос в заголовке.

1 Ответ

0 голосов
/ 29 сентября 2011

Я решил, что шаблон проектирования KVO (Key Value Observer) имеет смысл для барботирования информации о состоянии от нижних уровней к верхним.Только та информация о состоянии, которая должна течь, наблюдается на каждом из соответствующих слоев.

В этом приложении событие касания тайла отправляется наблюдателю на следующем уровне вверх (уровень сетки), сообщая ему, что пользователь выбрал дату, которая является свойством класса тайла.

На уровне сетки он меняет свое состояние на основе своего текущего состояния и новой информации, которую его наблюдатель получает из тайла.(В моем календаре пользователь может выбрать диапазон дат, выбрав дату начала и дату окончания, и может продолжать нажимать на плитки, чтобы изменить выбор диапазона дат.) Это изменение состояния на уровне сетки приводит к изменению начала и /или дата окончания, поэтому свойство NSDictionary обновляется.

На уровне календаря наблюдатель видит изменение словаря startDate / endDate.Независимо от того, из какой сетки это получено (есть две сетки, и одновременно активна только одна из них. Плиткам и календарю об этом не нужно знать) даты начала и окончания календаря обновляются.

Календарь - это представление, встроенное в одно из других представлений приложения, инициализированное отображаемым месяцем и выбранным диапазоном дат (даты начала и окончания).Информация передается сверху вниз через указатели на каждое из непосредственных подпредставлений на любом уровне.Эти подпредставления заботятся о сохранении настроенных подпредставлений.Я избавился от необходимости добавлять явно добавленные методы делегатов или обратные вызовы, и это упростило соединения сверху вниз.Соединения идут только на непосредственный уровень выше или ниже в иерархии.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...