Лучшие практики при написании клеевого кода
Я задал этот вопрос, чтобы получить некоторые мнения по поводу клея кода.
Например, представьте, что у вас есть класс (псевдокод):
class MyClass
int attribute a
string attribute b
И чтобы представить эту модель данных, у вас есть ОБА и ползунок, и текстовое поле для представления a, и текстовое поле и произнесите... метку окна для представления b.
Очевидно, что когда один из этих объектов просмотра изменяется, вы хотите обновить остальные. Однако обновление всего представления, очевидно, неэффективно.
method onSomethingHappened(uiObject)
model.appropriateAttribute = uiObject.value
Вопрос в том, что вы думаете о том, что делать дальше? Если объект модели реализует обратный вызов, который уведомляет слушателя, когда значение было изменено, позволяя написать связующий код как:
method modelChangedCallback(model, attribute)
uiObject1.value = model.a
uiObject2.value = model.a
Где вы можете проверить, что является измененным атрибутом, и ответить соответствующим образом? Это модель в Objective-C и Какао на Mac, по большей части.
ИЛИ, вы бы предпочли, чтобы ответственность лежала полностью в клеевом коде?
method onSomethingHappened(uiObject)
model.appropriateAttribute = uiObject.value
self.updateForAttribute("appropriateAttribute")
Оба этих подхода могут стать довольно сложными (как и проблема с клеевым кодом), когда ваш проект становится большим. Может быть, есть другие подходы. Как вы думаете?
Спасибо за любой вклад!
1 ответ
Для меня, я думаю, все сводится к тому, где нужно поведение. В описываемой вами ситуации факт, что вы связываете несколько элементов управления со свойством, является движущей силой требования, поэтому нет смысла добавлять код в модель для его поддержки.
В веб-модели я бы, вероятно, поместил логику в веб-страницу, поскольку это можно сделать довольно дешево с помощью Javascript. Если у меня нет такой роскоши (т. Е. Я имею дело с "тупым" представлением), то, вероятно, имеет смысл сделать это в контроллере или модели клея-кода. Если такого рода вещи становятся достаточно распространенными, я могу зайти так далеко, что создаю некую форму универсального помощника, чтобы уменьшить объем кода, который мне приходится иметь дело.