Apache flex 如何使我的AS3/Air代码更好?
大家好,这是我的弗兰肯斯坦密码,别开玩笑了,它很管用! 因此,您可以将表名和数据作为关联数组传递给对象。 我很确定这不是我以前写的好代码,我现在还在学习ActionScript。我能做些什么改变,或者你们怎么能做得更好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
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。虽然代码真的很可怕,我不会说它实际上是作为代码“工作”的。