Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
С виду обычный Command pattern...
Непонятно только, зачем он в языках, в котором функции являются объектами первого рода. Достаточно, наверное, замыкания
function makeGoCommand(appPresenter: IApplicationPresenter) {
return function (appView) {
appView.showModuleView(ApplicationPresenter(appPresenter).aboutPresenter.view);
}
}
Тут есть опеределенные нюансы. Дело в том, что эти шаблоны, практически наверняка происходят из какого-нибудь "архитектурного фреймворка", который заставляет их использовать. Традиционно, команды используются для общения с сервером (и больше ни для чего, т.как нормальному человеку в голову не прийдет их использовать, при том, что функию можно по ссылке передать), но для порядку - надо же где-то использовать, чтобы добро зря не пропадало.
И самое интересное начинается при использовании команд в комплекте с RemoteObject - это такой класс, который отвечает за рассылку запросов по HTTP+AMF. так вот, грубо говоря, new RemoteObject.send(whatever) возвращает токен уникальный для этого запроса (по которому потом можно идентифицировать ответ). Изза того, что command.execute() ничего не возврщает, а токен этот очень нужен, в каждом проекте, где это используется начинаются всяческие попытки допилить архитектуру так, чтобы этот токен как-то все таки получать. При чем, обычно, осознание того, что токен нужен приходит очень поздно.
Замыкания в AS3 - плохо т.как они всегда создаются по-новой, т.е. не считаются константами. У них this такой же, как и у Яваскриптовых функций - и это чревато проблемами безопасности, когда "чужую" функцию применяют к "своему" объекту. Кроме того, очень часто их пытаются использовать для обработки событий, т.как полноценный обработчик писать лень - но впоследствии обнаруживается, что отписать анонимную функцию от события уже нельзя, если ссылка на нее потерялась.
а ваши разве пасутся на гк? сомневаюсь
Непонятно только, зачем он в языках, в котором функции являются объектами первого рода. Достаточно, наверное, замыкания
Замыкания - да вы шо, нини, на каждый чих по классу.
yyy: А вдруг мы захотим портировать нашу систему на яву? Поэтому замыкания использовать нельзя.
xxx: *facepalm*
см. http://govnokod.ru/11321
В оригинальном вирто-паскале нельзя.
И самое интересное начинается при использовании команд в комплекте с RemoteObject - это такой класс, который отвечает за рассылку запросов по HTTP+AMF. так вот, грубо говоря, new RemoteObject.send(whatever) возвращает токен уникальный для этого запроса (по которому потом можно идентифицировать ответ). Изза того, что command.execute() ничего не возврщает, а токен этот очень нужен, в каждом проекте, где это используется начинаются всяческие попытки допилить архитектуру так, чтобы этот токен как-то все таки получать. При чем, обычно, осознание того, что токен нужен приходит очень поздно.
Замыкания в AS3 - плохо т.как они всегда создаются по-новой, т.е. не считаются константами. У них this такой же, как и у Яваскриптовых функций - и это чревато проблемами безопасности, когда "чужую" функцию применяют к "своему" объекту. Кроме того, очень часто их пытаются использовать для обработки событий, т.как полноценный обработчик писать лень - но впоследствии обнаруживается, что отписать анонимную функцию от события уже нельзя, если ссылка на нее потерялась.