![]() |
Шаблон программирования - Команда
В книге "ActionScript 3 Design Patterns" увидел пример использования этого шаблона - вызов сообщения по таймеру.
На его основе я попробовал сделать своё - вывод сообщения по щелчку мыши. В дальнейшем хочу сделать таким способом перетаскивание объектов на экране. Но ничего не получается, флэш при компилировании выдаёт ошибку "TestInterfaceOne.as, Line 38 1136: Incorrect number of arguments. Expected 1.". Вот сам код: IDrag.as Код AS3:
DragCommand.as Код AS3:
DragReceiver.as Код AS3:
DragInvoker.as Код AS3:
TestInterfaceOne.as Код AS3:
|
Думаю, 38-я строка не помешала бы.
Код AS3:
|
На сколько я это себе предствляю, этот шаблон происходит от ограниченности Java, в котором исполняемый код нельзя передать по ссылке. В AS3 в нем необходимости я никогда не замечал.
Т.е. если мы назовем Function - Command, а apply / call заменим на run / execute получим то же самое, только уже встроенное в плеер. |
@wvxvw, я правильно понимаю что ты рекомендуешь не использовать GoF Command, а просто дёргать нужный метод по ссылке?
|
2wvxvw: Команду можно параметризировать, а указатель на функцию - нет.
Кроме того, все таки этот паттерн, это не только Callback... А нечто большее... Хотя, конечно, в некоторых случаях, можно обойтись и функцией. |
Ну, как я понимаю из объяснения вики:
Цитата:
Код AS3:
Да, и судя по описанию, этот шаблон в общем случае в AS3 реализовать не возможно т.как у функции может не быть имени :) |
Это всего лишь один из примеров реализации...
Вот тут много ссылочек и примеров на тему http://seregaborzov.wordpress.com/20...mmand-pattern/ И коль скоро есть команды, зачастую их реализация несколько сложнее, чем указатель на функцию и массив ее параметров... P.S. Как один из примеров. У нас есть некоторая рпг-ка... Там есть всякие заклинания и прочяя ерундень... Любое заклинание содержит в себе команду, которая проделывает реальное действие. А сами команды вообще описываются в XML например или JSON или еще как то... Ну например так: Код AS3:
DealDamage - класс команды, написанный на AS damage - одно из свойств класса DealDamage... И как такое реализовать с помощью фунцкии? А возвращать команда ничего не должна... Ну или boolean, максимум... Хотя это тоже лишнее, потому что команда может выполняться отложено, но пользователь об этом знать не должен... |
По ссылке - там и мухи и повидло и чего только нет :) И транзакцию туда же приплели... Т.е. у понятия "транзакция" есть вполне опредленный смысл, который где-то отдаленно напоминает команду... но, так, на уровне "Мойша по телефону напел". Транзакция - это набор действий, в пределах которых гарантируется постоянство результата использованых выражений. Это восновном применимо к базам данных. Т.е. например,
Код:
select "foo" from T |
"Команда - паттерн поведения объектов. Инкапсулирует запрос как объект, позволяя тем самым задавать параметры клиентов для обработки соответствующих запросов, ставить запросы в очередь или протоколировать их, а также поддерживать отмену операций. Известен также под именем Action (действие), Transaction (транзакция)."(с)GoF
Вообще почитайте тогда это, если то что было выше вам не нравится http://pure-mvc.org/doku.php/patterns/behaviour/command Типа истинна в последней инстанции, потому как собственно авторами написана:) P.S. Хотя после фразы Цитата:
P.P.S. Почему команда не должна возвращать результат я написал. Но опять же это не правило, это то, как на мой взгляд должно это выгладить... А каждый все равно волен делать как ему хочется... Но если наша команда можт ставиться в очередь, о чем сказано в определении, возвращаемый результат не имеет смысла... |
|
Цитата:
Припоздал :) |
Не, тут фишка в другом. Практика показывает (например Cairngorm), что применение этого паттерна к AS3 заканчивается чуть чаще чем всегда плохо. И если Cairngorm можно приравнять к ограблению с нанесением, то PureMVC, в таком случае, - это расстрельная статья. А еще лучше, казнить через повешение на каком-нибудь видном месте, чтобы остальным в назидание :)
Давайте я по такому поводу на другом жизненном примере покажу: вот, существует такая вещь как "кашрут" - на самом деле, набор правил поведения в иудаизме, но больше извесная как несуразные правила питания. Одно из самых глупых правил - разделение мясной и молочной пищи. Оправданием существования этому правилу служит библейская строчка "не вари ягненка в молоке матери". Т.е. никто никогда не говорл, например про сыр или курятину. Но, даже не это главное. История же этого "закона" такова: в древности в селах было принято летом собирать всю сельскую живность в стадо, и посылать его пастись далеко от населенных пунктов. Вместе со стадом, естесственно, полагались и пастухи. Пастухи были как правило самыми бедными поселянами, и для них это событие было поводом подзаработать. Так вот, закон был написан для пастухов-сменщиков, чтобы, сволочи, не воровали ягнят, которые рождаются пока скотина далеко от дома! Использование шаблонов в програмировании мне очень часто напоминает эту историю... т.е. я вот сейчас сижу и в унынии гляжу на 100500 датаконтроллеров в нашем проекте и понимаю, что если бы человек никогда не читал про шаблоны, мне бы сейчас было меньше переделывать... Вообще, упоминание шаблонов всуе скорее вызывает рвотный рефлекс, сравнимый по ощущению с рассматриванием килотон Ява-энтерпрайз кода, бессмысленного и беспощадного. |
Олег - ты приближаешься к "гуру" в моём любимом табеле о рангах программистов)
|
А я специально никогда не использую паттерны... Но, к примеру впервые когда я взял в руки книгу про паттерны и почитал, понял что использую минимум четверть паттернов... Хотя иногда к ним обращаюсь, потому как они становятся чем то вроде терминологии проектирования....
А еще мне не понятно, почему все так усиленно привязывают паттерны к яве... В той же книге от GoF, все примеры сделаны на С++... P.S. Посднюю ссылку которую я давал не имеет отношение к PureMVC. Просто первая ссылка которую дал гугл на непосредственно оригинальный книги GoF. P.P.S. Никто никого не заставляет пользоваться шаблонами... С другой стороны думаю куда чаще встречается код, где программисты пишут без какого либо понятия о паттернах, да и ООП... И разобраться и исправить мегабайты когода будет ничуть не проще... P.P.P.S. При этом, я согласен, что есть тендеция перебарщивать с паттернами и MVC и объектно ориентированного выпендрежа, что тоже есть плохо... Но тут главное не забывать, что программа пишется для того что бы работать, а не быть красивой внутри... Но и не забывать, что потом ее может быть придется дорабатывать:)3 |
Потому что умножающий знания умножает беды. :)
И вообще, мы во флейм скатываемся. А чтобы этого не случилось... обретем вновь серьезную личину :) На самом деле простота, если уж мы заговорили об энтерпрайз секторе гораздо важнее соответствия каким угодно шаблонам (что не говорит о том, что соответствие шаблонам обязательно ведет к сложности). Простой код легче, и в итоге экономически выгоднее сопровождать, кроме того, меньше шансов, что он будет неисправно работать. Поэтому когда я вижу блок-схему из 8 классов, там где это без ущерба для здоровья заменяется одним, мне становится плохо :) И я не сторонник динамической типизации :P Шаблоны привязывают к Яве потому, что в C++ - разброд и шатания, каждый определяет строки и булианы как ему нравится, а то и числа могут переназначить. А в Яве все единообразно до занудства. Т.е. в задачах, где типично используется Ява, как правило креатив не то что не приветствуется, за него и с работы вылететь можно. Поэтому шаблонное мышление == Ява мышление, а с другой стороны Ява - язык для людей с отставанием в развитии (это не я, это извесная цитата). |
Ок, завязываем с холиваром. Единственное, если кто-то хочет освоить паттерны, не стоит его от этого отговаривать... А то ведь может статься так, придет человек на работу устраиваться, его чего нить спросят, а он не знает. И будет на вашей совести, что его на работу не взяли, а оно вам надо, карму портить? ;)
|
Код AS3:
Вот мне как раз нужно освоить паттерны. Лучше сразу учиться правильно, чем потом ломать сформировавшиеся привычки и переучиваться когда возникнет реальная необходимость. И простой пример вывода сообщения и взял не из-за того, что я не знаю как сделать проще, а для простоты понимания и освоения шаблонов, ООП вообще. JackFromChaos правильно заметил. Для тех же игр со множеством разных персонажей шаблоны как раз очень хорошо подходят, или для меню сайта/программы и т.д. P.S. Я не знаю ни java, ни C++. |
| Часовой пояс GMT +4, время: 19:59. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.