Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Design patterns? (http://www.flasher.ru/forum/showthread.php?t=104309)

beshan 22.11.2007 19:10

Design patterns?
 
написал код загрузчика и вот уже третий день пытаюсь определицца к какому паттерну его отнести... я его отнес к Command (Behavioral)...

может есть у кого-то больше опыта по идентификации паттернофф... буду рад услышать ваше мнение по поводу моего кода и паттерна к которому он может относицца... заранее благодарю...

Код:

package com.util
{                       
        import flash.display.MovieClip;
        import flash.events.Event;       
        import flash.events.ProgressEvent;
        import flash.events.IOErrorEvent;       
       
        //************ CLASS DECLARATION ************
        /*
        LoaderController class controls the loading process on the Command (Behavioral) design pattern.
        METHODS:
        - getBytesLoaded - return bytesLoaded
        - getBytesTotal - return bytesTotal
        - progressLoader - displays process loading
        - completeLoader - change frame on root
       
        EVENTS:
        rootLoaderInit - IE6 AS3 Preloader Events Failing and wait when finish initialization rootSymbol
        rootLoaderProgress
        rootLoaderComplete
        rootLoaderError
        */
        public class LoaderController
        {                                               
                private var root_mc:MovieClip;
                private var loader_mc:MovieClip;
                private var rootLabel:String;
                private var rootSymbol:String;
                private var returnFunction:Function;
               
                private var bytesLoaded:Number;
                private var bytesTotal:Number;
                private var bytesTrash:Number;
               
                //************ CONSTRUCTOR ************               
                public function LoaderController (_root_mc:MovieClip, _loader_mc:MovieClip, _rootLabel:String, _rootSymbol:String, _returnFunction:Function):void
                {
                        root_mc = _root_mc;
                        loader_mc = _loader_mc;
                        rootLabel = _rootLabel;
                        rootSymbol = _rootSymbol;
                        returnFunction = _returnFunction;
                       
                        loader_mc.loader.text = "0 %";                       
                        loader_mc.loader_line.scaleX = 1;
                       
                        root_mc.addEventListener (Event.ENTER_FRAME, rootLoaderInit);       
                        root_mc.loaderInfo.addEventListener (ProgressEvent.PROGRESS, rootLoaderProgress);
                        root_mc.loaderInfo.addEventListener (Event.COMPLETE, rootLoaderComplete);
                        root_mc.loaderInfo.addEventListener (IOErrorEvent.IO_ERROR, rootLoaderError);
                }
               
                //************ METHODS ************               
                public function getBytesLoaded ():Number
                {
                        return bytesLoaded;
                }
               
                public function getBytesTotal ():Number
                {
                        return bytesTotal;
                }
               
                private function progressLoader ():void
                {                                       
                        var proc:Number = Math.floor(bytesLoaded/bytesTotal*100);                       
                        loader_mc.loader.text = proc +" %";                       
                        loader_mc.loader_line.scaleX = proc/100;
                }
               
                private function completeLoader ():void
                {
                        root_mc.gotoAndStop(rootLabel);                                                               
                }               
               
                //************ EVENTS ************               
                private function rootLoaderInit (event:Event):void
                {       
                        //IE6 AS3 Preloader Events Failing
                        if (!(bytesTrash>1) && root_mc.loaderInfo.bytesTotal >1)
                        {                               
                                if (bytesLoaded == bytesTotal && bytesTotal>1)
                                {                                       
                                        completeLoader ();       
                                }
                                else
                                {                               
                                        bytesLoaded = root_mc.loaderInfo.bytesTotal;
                                        bytesTotal = root_mc.loaderInfo.bytesLoaded;       
                                        progressLoader ();                                       
                                }                               
                        }
                       
                        // Wait when finish initialization rootSymbol.
                        if (root_mc[rootSymbol] != null)
                        {                               
                                returnFunction();
                                loader_mc.visible = false;                               
                                root_mc.removeEventListener(Event.ENTER_FRAME, rootInit);                                       
                        }
                }
                               
                private function rootLoaderProgress (event:ProgressEvent):void
                {                       
                        bytesLoaded = event.bytesLoaded;
                        bytesTotal = bytesTrash = event.bytesTotal;                       
                        progressLoader ();
                }
               
                private function rootLoaderComplete (event:Event):void
                {
                        completeLoader ();       
                }       
                                       
                private function rootLoaderError (event:IOErrorEvent):void
                {
                        trace("ioErrorFunction (root): " + event);
                }       
        }
}

для справки:
Design patterns - шаблоны проектирования, предназначенны для оптимизации кода.
Используюцца либо на этапе проетирования системы либо во время рефакторинга/оптимизации уже написанного проекта. Для флеша можно применять либо для очень больших проектофф либо когда однотипные проекты задолбали и хочицца придумать для себя развлекуху :))))
Как правило используецца либо на уровне самостоятельного класса, либо класса и взаимодействия с его наследниками...

__i 22.11.2007 19:27

расслабся и не думай об этом ) лучше бы изучил как правильно писать коменты ASDoc было бы полезнее )

Про паттерны полезно почитать и осмыслить что к чему, но не стоит останавливатся на точном следовании того или иного паттерна - все зависит он проекта!

И уж тем более не стоит пытаться готовый код подогнать под какое либо определение.

librio 23.11.2007 11:52

Я могу понять, когда мы выбираем паттерн для решения определенной задачи.... Но искать паттерн под готовый код - это уже... хм... вобщем... да. :)
-Это из той же оперы, что писать юнит-тест к написанному и протестированному ручками коду :)

beshan 23.11.2007 12:48

по поводу комментариефф... тексты исчо деффачка транслятор будет проверять... а формат камментофф это шаблон клиента... вообще позиция клиента и мне не понятна но он хочет что бы ффсе классы были написанны "Java-style design pattern"... поэтому и получаецца что я свой код пишу годамми отточенными шаблонами но надо мои шалоны исчо как позицианировались относительно стандартных design pattern....

судя по вашим камментариям помощи я не дождусь :))))))) ну да ладно...

†‡Paladin‡† 23.11.2007 14:01

По поводу оптимизации. Оптимизация всегда направлена на ухудшение кода в пользу его быстродействия.

DarkLight 23.11.2007 14:05

Цитата:

Сообщение от †‡Paladin‡†
По поводу оптимизации. Оптимизация всегда направлена на ухудшение кода в пользу его быстродействия.

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

Dimchansky 23.11.2007 21:42

откуда там упоминание о Command взялось вообще?
> controls the loading process...

я бы вообще не стал относить этот код к какому-либо типовому решению, но елси бы меня взяли за горло и вежливо попросили это сделать, то, скорее, это адаптер для загрузки чавото кудато

†‡Paladin‡† 23.11.2007 21:47

Цитата:

Сообщение от DarkLight
Не совсем...1ый этап оптимизации - это рефакторинг для устранения дублирования кода, ненужных переменных, в некоторых случаях слияния нескольких маленьких классов в один, избавления от лишних циклов и т д...на этом этапе качество кода только повышается. А на последующем этапе, если всего этого не хватило, уже начинается ухудшение кода. До этого доходит далеко не всегда.

Устранение своих косяков трудно назвать оптимизацией.

DarkLight 23.11.2007 22:42

Цитата:

Сообщение от †‡Paladin‡†
Устранение своих косяков трудно назвать оптимизацией.

Это хорошо если своих:) И выбор неоптимального алгоритма - не косяк, т к не всегда можно точно оценить быстродействие на стадии проектирования

†‡Paladin‡† 24.11.2007 00:47

Цитата:

Сообщение от DarkLight
Это хорошо если своих:) И выбор неоптимального алгоритма - не косяк, т к не всегда можно точно оценить быстродействие на стадии проектирования

Перечитай свой предидущий пост. Ты там говорил о чистке левых переменных помоему, а не выборе оптимального алгоритма. Вобщим моя позиция по поводу того, что использование паттернов не ведет к "оптимизации" кода остается неизменной.

LokiDi L0ck 24.11.2007 04:12

2beshan, можно узнать почему вы упомянули именно "Java-style design pattern", ведь понятие паттернов, их описание и реализация появились далеко не с рождением java :) В частности тот же command =)

Не в первый раз вижу, что as прогеры с появлением 3-ей версии начали часто упоминать "паттерны джавы"))) Джава тут совсем не причём (или возможно вы ничего другого не знаете))

beshan 26.11.2007 15:48

Цитата:

Сообщение от Dimchansky
то, скорее, это адаптер для загрузки чавото кудато

Command - просто залепуха пока что-то по конкретнее не найду...
а насчот адаптера - возможно... надо будет мне в этом направлении исчо поковырять...

Цитата:

Сообщение от LokiDi L0ck
2beshan, можно узнать почему вы упомянули именно "Java-style design pattern", ведь понятие паттернов, их описание и реализация появились далеко не с рождением java :) В частности тот же command =)

Не в первый раз вижу, что as прогеры с появлением 3-ей версии начали часто упоминать "паттерны джавы"))) Джава тут совсем не причём (или возможно вы ничего другого не знаете))

Java-style design pattern - это копипаст из брифа... да мне эти паттерны самому поперек горла... применимость паттернофф для флэша очень надуманна... хотя может через пару годикофф и пригодицца...

п.с.
судя по количество упоминаний на флешовых блогах и форумах про паттерны то можна сделать предположения:
- либо массовый психоз на фоне статей в периодике и желания адоба придать акшинскрипту большую значимость находя какие то аналогии с большими языками...
- либо (локально) брифы пишут джавовские проджект менеджеры / джава программисты которые планируют в дальнейшем этот скрипт в какой то степени поддерживать/интегрировать...
- либо (глобально) джава конторы рассматривают флеш как перспективный и пытаюцца со своим уставом втиснуцца на этот рынок...

Amon Duul 26.11.2007 16:11

Самый лучший паттерн - Copy Paste.
По количеству использований опережает большинство остальных паттернов.

librio 26.11.2007 19:52

Цитата:

Сообщение от beshan
по поводу комментариефф... тексты исчо деффачка транслятор будет проверять... а формат камментофф это шаблон клиента... вообще позиция клиента и мне не понятна но он хочет что бы ффсе классы были написанны "Java-style design pattern"... поэтому и получаецца что я свой код пишу годамми отточенными шаблонами но надо мои шалоны исчо как позицианировались относительно стандартных design pattern....

судя по вашим камментариям помощи я не дождусь :))))))) ну да ладно...

На счет имени паттерна к предложенному коду вряд ли кто-то поможет :) потому как это бред.
А вот стилю письма (когда видишь всякие "камментофф" и "получаецца" в тексте) - имя точно придумать смогут

:)

librio 26.11.2007 19:55

Цитата:

Сообщение от Amon Duul
Самый лучший паттерн - Copy Paste.
По количеству использований опережает большинство остальных паттернов.

Сам понял? После такого новички еще начнут думать, что паттерны - это то "каким образом некоторые пишут программы" (copy/paste).

†‡Paladin‡† 26.11.2007 21:44

Цитата:

Сообщение от librio
Сам понял? После такого новички еще начнут думать, что паттерны - это то "каким образом некоторые пишут программы" (copy/paste).

А ты public function set blablabla(value:Number):void {} каждый раз сам руками набираешь? Лично я себе сразу штук 20 копирую и экономлю на этом пол часа времени. И не дай Бог новичкам освоить сей метод программирования... Темная сторона силы поглотит их?

LokiDi L0ck 27.11.2007 09:56

2beshan, всё ваше вышесказанное, не объясняет привязанность паттернов только к джаве. В ней, видимо придёться повториться, паттерны используются ровно так же как и в любом другом языке.
Расписывать ничего не буду, ваш выбор таков, стойте себе на здоровье)

beshan 27.11.2007 19:07

Цитата:

Сообщение от librio
А вот стилю письма (когда видишь всякие "камментофф" и "получаецца" в тексте) - имя точно придумать смогут

как говорили у нас в садике - называй меня хоть гаршком а меня мама ффсе равно любит :)))) что в переводе на современный язык означает мне пофиг главное что бы мои тулзовины работали корректно и мне не стыдно было их показать :)))))

Цитата:

Сообщение от LokiDi L0ck
не объясняет привязанность паттернов только к джаве

а я и не утверждал что паттерн == джава || джава == паттерн...
просто задал вопрос и по мере поступления наводящих вопрософф на них отвечал...

с предметом вопроса разобрался....
ффсем спасибо за внимание...
тему можна закрывать...

п.с.
для тех кого жизнь заставит расширять свои горизонты смотреть тута

сцылка 1
сцылка 2
сцылка 3


Часовой пояс GMT +4, время: 02:04.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.