Плохо ли программирование для передачи информации от класса A к классу B к классу C, а не напрямую от класса A к C? - PullRequest
3 голосов
/ 11 августа 2011

Я планирую сделать приложение, содержащее клавиатуру пианино.Будет специальный класс, представляющий отдельный ключ, а ключами будут подпредставления другого пользовательского класса - класса фортепиано.Экземпляр класса фортепиано будет затем создан в viewcontroller.

Мне нужен класс для клавиш, потому что когда происходит событие касания, мне нужно знать, какая клавиша нажимается.Когда происходит событие касания, клавиша уведомляет пианино, какая клавиша используется, путем делегирования, и пианино отвечает, передавая ту же информацию контроллеру представления, в том числе и через делегирование.

Причина, по которой я не могуЯ не хочу, чтобы информация передавалась от ключа прямо в viewcontroller, я не собираюсь непосредственно создавать экземпляры класса ключа в vc, и это было бы более читабельно в первом случае.

Передача информации от ключа к пианино в контроллер представления плохого дизайна?

Ответы [ 3 ]

4 голосов
/ 11 августа 2011

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

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

1 голос
/ 11 августа 2011

Я так не думаю.Особенно в этом случае я думаю, что это действительно хороший дизайн.

0 голосов
/ 11 августа 2011

Я не уверен, что полностью понял ваш дизайн клавиш - пианино - viewcontroller.Но исходя из темы.

Это неплохо.если B защищает A от C. Это означает, что A никогда не нужно знать о C. Это покрыто «законом» объектно-ориентированного проектирования, называемым законом деметры.Не то, чтобы это действительно «закон», а скорее руководство по дизайну.Он способствует разъединению объектов, поэтому им не нужно ничего знать, кроме нескольких тесно связанных объектов.

http://en.wikipedia.org/wiki/Law_of_Demeter

или даже с диаграммами, использующими AB и C согласно вопросу

http://www.aspiringcraftsman.com/tag/law-of-demeter/

...