在AS3 Class Design - Refactoring方面需要帮助

时间:2010-10-15 12:28:02

标签: actionscript-3 oop refactoring

我有一个“课程”课程,其中包含“ CourseItems ”的集合。
每个 CourseItem 都有一个与其关联的文件夹(对于其文件)。
我需要将CourseItem添加到Zip文件中并在压缩后加密 使用FZip和As3crypto我可以做zip并加密zip文件 是否进行加密取决于用户 目前我的代码看起来类似于(忽略sytax):

编辑:我会尝试添加更多信息+更多说明
    基本上,课程是一个包含子文件夹(课程项目)的文件夹(用户可选)     将子文件夹结构映射到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 
              }
            }

基本上在上面的设计中我想在Zipping之后调用CourseItem中的“Encrypt”方法。

注意:我之前更改过课程类。
我曾尝试在CourseItem中移动包,然后我在zip之后处理加密。
但是通过这种方式,我非常喜欢Zip和加密方法 压缩后 - >加密被强制称为 我希望以这两种方法重构我的代码  zip和encrypt是相互独立的?
我怎么能这样做..

全部谢谢

1 个答案:

答案 0 :(得分:1)

编辑: 在您编辑之后,我已相应地编辑了我的代码

当用户选择加密时,检查布尔值,如果为true,则在调度zip完成事件后调用加密方法。

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")); 
    }
}