Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 如何使我的AS3/Air代码更好?_Apache Flex_Actionscript 3_Air_Adobe - Fatal编程技术网

Apache flex 如何使我的AS3/Air代码更好?

Apache flex 如何使我的AS3/Air代码更好?,apache-flex,actionscript-3,air,adobe,Apache Flex,Actionscript 3,Air,Adobe,大家好,这是我的弗兰肯斯坦密码,别开玩笑了,它很管用! 因此,您可以将表名和数据作为关联数组传递给对象。 我很确定这不是我以前写的好代码,我现在还在学习ActionScript。我能做些什么改变,或者你们怎么能做得更好 public function save(table:String,data:Object):void { var conn:SQLConnection = new SQLConnection(); var fold

大家好,这是我的弗兰肯斯坦密码,别开玩笑了,它很管用! 因此,您可以将表名和数据作为关联数组传递给对象。 我很确定这不是我以前写的好代码,我现在还在学习ActionScript。我能做些什么改变,或者你们怎么能做得更好

public function save(table:String,data:Object):void
        {
            var conn:SQLConnection = new SQLConnection();
            var folder:File = File.applicationStorageDirectory;
            var dbFile:File = folder.resolvePath("task.db");
            conn.open(dbFile);

            var stat:SQLStatement=new SQLStatement();
            stat.sqlConnection=conn;

            //make fields and values
            var fields:String="";
            var values:String="";
            for(var sRole:String in data)
            {
                fields=fields+sRole+",:";
                stat.parameters[":"+sRole]=data[sRole];
            }
            //trim off white space
            var s:String=new String(fields);
            var cleanString:String=s.slice( 0, -2 );

            //over here we add : infront of the values I forget why
            var find:RegExp=/:/g;
            var mymyField:String=new String(cleanString.replace(find,""));
            cleanString=":"+cleanString;

            var SQLFields:String=mymyField;
            var SQLValues:String=cleanString;

            stat.text="INSERT INTO "+table+" ("+SQLFields+")VALUES("+SQLValues+")";

            stat.execute();
        }

有人曾经告诉我,一个有效的愚蠢想法并不愚蠢。作为程序员,我们的第一个目标是(通常)解决业务问题;只要我们的代码做到了这一点,我们就成功了。你不需要为代码的有效性道歉

关于我将如何更改您的代码片段;我可以把它再封装一点。文件夹、dbFile和db文件名(task.db)是否可以作为属性添加到类中或作为参数添加到方法中

您能否将SQL语句的创建与连接处理和数据解析分开

一些评论

  • 如前所述,您可以分解出所有db连接,以便在需要更改db名称时可以重用该函数而无需重写它

  • 不要使用新的
    字符串
    (),您可以避免使用它

  • 清除字段之间的空白是没有用的:a,:b与:a,:b相同

  • 某些约定不以大写字母开头本地变量名,并且将它们重新分配给另一个变量也没有用

如果在您的
//make字段和值之后我没有出错,可以将其重写,例如:

//make fields and values
 var fields:String = "";
 var values:String = "";
 var fieldSeparator:String = "";

 for(var sRole:String in data)
 {
  fields += fieldSeparator + sRole;

  var paramName:String = ":" + sRole;
  values += fieldSeparator + paramName;

  stat.parameters[paramName] = data[sRole];

  fieldSeparator = ",";
 }

 stat.text = "INSERT INTO " + table +" (" + fields + ") VALUES (" + values + ")";

 stat.execute();

老实说,构建查询的部分相当可怕。一半的代码会删除您在几行之前添加的垃圾。这使得它很难阅读和理解。这是代码质量差的标志。以下内容要简短得多:

        //make fields and values
        var fields:Array = [];
        for(var field:String in data) {
            fields.push(field);
            stat.parameters[":"+field]=data[fieldName];
        }
        var sqlFields:String = fields.join(",");
        var sqlValues:String = ":"+fields.join(",:");

        stat.text="INSERT INTO "+table+" ("+sqlFields+")VALUES("+sqlValues+")";

        stat.execute();

只要系统资源没有被滥用,我同意第一种说法。内存,尤其是驻留在浏览器中的闪存,应始终正确管理。+1。虽然代码真的很可怕,我不会说它实际上是作为代码“工作”的。