Нужна помощь с AS3 Class Design - Рефакторинг - PullRequest
0 голосов
/ 15 октября 2010

У меня есть класс " Course ", который содержит коллекцию " CourseItems ".
Каждый CourseItem имеет папку , связанную с ним (для своих файлов).
Мне нужно добавить CourseItem в Zip-файл и после его шифрования архивировать.
Используя FZip и As3crypto, я могу сделать zip и зашифровать zip файл.
Делать шифрование или нет - решать только пользователю.
В настоящее время мой код выглядит как (игнорировать синтаксис):

Редактировать: я постараюсь добавить еще информацию + подробное описание
В основном курс - это папка (по выбору пользователя) с подпапками (элементами курса).
отображение структуры подпапок в объект (ы) courseitem.

       //main code
    var encryptCourse:Boolean;
     encryptCourse=true; // read from user..checkbox
    var course:Course = new Course("path_coursefolder");//from user input

     course.createCourseItems();

    //read course folder and create "courseitem" for each subfolder
    //and save in "courseItems" collection
 //after creating pack course - zip and encrypt
   course.Pack(encryptCourse);//encryptCourse bool encrypt course or not



 class Course
     {
               var courseItems:Array; //set when creating
               public function Pack()
               {
                     for each (var item:CourseItem in courseItems)
                        {
                           item.addEventListener("ZIP_COMPLETE",onitemzip);
                           item.zip();                     
                        } 
               }    

         private function onitemzip(e:Event)
          { 
              //if user selected to encrypt..do encryption 
             //now  i want to call the encrypt method :(
             //item.Encrypt() //cant call this,,how to refer to "item"??
          }
      }

            class CourseItem
            {
              var files:Array; //set when creating
              var _courseZipfile;
              public function ZIP()
              {
                var ziputil = new Ziputil()
                 ziputil.createZip("some_name",files);
                 ziputil.addEventListener(Event.Complete,onZipComplete);
              }

               private function onZipComplete(e:Event)
               {
                 dispatchEvent(new ZipEvent("ZIP_COMPLETE"));   
                 //dispatch and update progess
                 //COULD CALL ENCRYPT HERE..but want to avoid.   
               }

              public function Encrypt()
              {
                //encrypt zip file here
                //event of encrypt finish 
              }
            }

В основном в приведенном выше дизайне я хочу вызвать метод "Зашифровать" CourseItem в Course после Zipping.

Примечание: я ранее изменил класс courseitem.
Я пытался переместить пакет в CourseItem, а затем я могу обработать шифрование после zip.
Но благодаря этому я сильно объединяю методы Zip и encrypt.
После архивирования -> обязательно вызывается шифрование.
я хочу рефакторинг моего кода таким образом, чтобы оба метода
zip и encrypt независимы друг от друга?
Как я могу сделать то же самое ..

Спасибо всем

1 Ответ

1 голос
/ 15 октября 2010

Редактировать: после ваших изменений я соответственно отредактировал свой код

Когда пользователь выбирает шифрование, проверьте значение логического значения, если true, вызовите метод шифрования после отправки события zip complete.

public class Course
{
   public function Pack(encryptCourse:Boolean)
   {
      for each (var item:CourseItem in courseItems)
      {
         item.addEventListener("ZIP_COMPLETE", onitemzip);

         if(encryptCourse)
           item.encrypt = true;

         item.zip();                     
       } 
   } 
}

public class CourseItem
{
    private var _encrypt:Boolean;

    public function set encrypt(value:Boolean):void
    {
       _encrypt = value;
    }

    private function onZipComplete(e:Event)
    {  
      if(_encrypt)
         Encrypt();

      //here you can choose to dispatch a complete event according
      //to the value of _encrypt , if true , dispatch the event 
      //after encryption
      dispatchEvent(new ZipEvent("ZIP_COMPLETE")); 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...