![]() |
|
||||||||||
|
|||||
|
Пишу именно в этот топик так как меня интересуют какими инструмента AS3 можно что-то такое реализовать.
По ходу там должно происходить нечто типа: Превращается в: Ну хорошо, но как реализовать такое переопределение в рантайме, не наследуясь от flash.utils.Proxy?
__________________
ranga |
|
|||||
|
Цитата:
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Modus ponens
|
Это на самом деле только чать ответа: кроме непосредственно события есть еще и сгенерированных код слушателей. Он не просто ужасный, он тошнотворный
Смысл примерно следующий:превращается примерно вот во что: + где-то еще код непосредственно подписки на событие. Но это мелочь по сравнению с тем, что биндинги будут вызываться и тогда, когда baz не существует - т.е. произойдет ошибка попытки чтения из свойства нулл-объекта. Ну, а чтобы не пугать разработчиков, эти ошибки, завернуты в try-catch. Т.е. биндинг превращается в неюзабельную кашу, изза которой, например, наследовать класс использующий биндинг, вобщем, нет смысла. Вместо того, чтобы по-человечески добавить слушатель, который потом программист при желании мог бы повторно использовать, или подправить под собственные нужды создается кусок кода, который можно только выбросить врезультате.
__________________
Hell is the possibility of sanity |
|
|||||
|
Цитата:
Автогенерированный код, как правило, выглядит не очень. В любой системе. Цитата:
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Modus ponens
|
Автоматически сгенерированный код в той же студии выглядит куда приличнее. Конечно, там тоже бывает, но в тривиальных ситуациях - код нормальный. Во флексе в принципе, система порочная, просто не бывает ситуаций, когда сгенерированный код не возможно было бы написать гораздо лучше.
Как бы это выглядело: все, что реализует IBindingClient (или IBindingClient2 - еще один замечеательный момент в СДК) реализовывало бы propertyChangeHandler, в который бы передавалась строка описывающая путь к измененному свойству. Собственно, похожим способом, как реализованы рантайм биндинги, только без попыток что-то скрыть, и ради этой скрытности наворотить кучу идиотизмов. Соответственно, если в ответ на событие нужно было бы вызвать сгенерированный метод класса, а не анонимную функцию которую из класса-наследника и не достать особенно. Т.е. если смотреть на мой пример выше, то был бы сгенерирован примерно следующий код: И не нужно ловить ошибки, и создавать видимость чего-то не понятного для разработчика. Если foo или baz нету на момент выполнения биндинга - пусть у разработчика болит голова, как это победить. А то получается ситуация, когда в половине случаев код, который в принципе не может выбросить исключения - типа чтения из константы - заворачивается в try-catch, и, наоборот, в оставшеся половине случаев, когда необходимо получить ошибку, чтобы понять, что что-то не успело проинициализироваться, или не правильно был определен порядок инициализации, все будет молчать.
__________________
Hell is the possibility of sanity |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:17. |
|
|
« Предыдущая тема | Следующая тема » |
|
|