Лучшие практики при написании клеевого кода - PullRequest
1 голос
/ 03 июня 2011

Я задал этот вопрос, чтобы узнать мнение по поводу кода клея.

Например, представьте, что у вас есть класс (псевдокод):

class MyClass
    int attribute a
    string attribute b

И для представления этой модели данных у вас есть ОБА ползунок и текстовое поле для представления, а также текстпоставьте флажок и скажите ... метку окна для представления b.

Очевидно, что когда один из этих объектов просмотра изменяется, вы хотите обновить остальные.Однако обновление всего представления явно неэффективно.

method onSomethingHappened(uiObject)
    model.appropriateAttribute = uiObject.value

Вопрос в том, что вы думаете о том, что делать дальше?Должен ли объект модели реализовывать обратный вызов, который уведомляет слушателя об изменении значения, позволяя написать связующий код, например:

method modelChangedCallback(model, attribute)
    uiObject1.value = model.a
    uiObject2.value = model.a

Где вы можете проверить, что это за атрибут, который изменился, и ответить соответствующим образом?Это модель в Objective-C и Cocoa на Mac, по большей части.

ИЛИ, вы бы предпочли, чтобы ответственность лежала полностью в коде клея?

method onSomethingHappened(uiObject)
    model.appropriateAttribute = uiObject.value
    self.updateForAttribute("appropriateAttribute")

Оба изэти подходы могут стать довольно сложными (как и проблема с клеевым кодом), когда ваш проект становится большим.Может быть, есть другие подходы.Как вы думаете?

Спасибо за любой вклад!

1 Ответ

1 голос
/ 03 июня 2011

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

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

...