Форум 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
Это хорошо если своих:) И выбор неоптимального алгоритма - не косяк, т к не всегда можно точно оценить быстродействие на стадии проектирования

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


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

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