2011-03-18 58 views
3

我想消除的魔术串这些用法:ActionScript 3对象的属性名称为字符串?

BindingUtils.bindProperty(obj1, "propertyName", obj2, ["childObj", "anotherProperty"]); 

var ddl:DropDownList = new DropDownList(); 
ddl.labelField = "propertyName"; 

这将是甜只需键入类似:

ddl.labelField = GetPropertyName(ComplexType.propertyName); 

会允许轻松重构并在属性名称更改时消除运行时错误。

任何想法?

+0

我不明白如何命名您建议的变化将消除与重构运行时错误。 – JeffryHouser 2011-03-18 16:06:17

+0

如果我用IDE的重命名重命名属性名称“propertyName”,说到“propertyName2”,它会在函数GetPropertyName的调用中找到并且会改变它......但是如果我现在重构/重命名,IDE不会将这个魔术字符串识别为我刚更改属性名称的类的属性。只需重构/重命名属性就会创建运行时错误。 – 2011-03-18 17:50:17

回答

4

不知道我是否正确理解您的问题。您可以轻松地在单独的类中定义静态常量以消除所有魔法字符串。

 
// In class ConstantContainer 

public static const PROPERTY_NAME:String = "propertyName"; 

// In anywhere else 
ddl.labelField = ConstantContainer.PROPERTY_NAME; 
+0

我认为它不会消除魔法字符串的使用,它只会将它移动到另一个类:/它在重构属性名称后中断。 – 2011-03-18 15:29:01

+1

它有一些好处。它可以防止可能导致运行时崩溃的错字。如果你需要使用魔法字符串,比如说20个地方,那么如果这个字符串需要改变,那么你需要找到所有20个地方。但是,如果您使用单一课程,那么显然您只需要在一个地方进行更改,而这个问题不会那么容易出错。 – taskinoor 2011-03-18 15:31:40

+2

看来,这是最好的,我们现在可以在ActionScript 3中完成...... – 2011-03-18 15:38:46

1

'魔术串'是需要的。请记住,这是一种动态的语言,对一切都有利有弊。这是其中的一个缺点。

有几件事你可以做,以限制像静态属性的错误。有一些想法,可能是你的兴趣在类似题目

相关问题