Value对象与AS3中的泛型类有什么不同?
答
Value Object(VO)是用于在软件应用子系统之间传输数据的设计模式。
一个actionscript类可以包含字段(变量),属性(getters/setters)和方法。术语值对象是指框架(如Cairngorm)用于在组件和模块之间存储和传递数据的类。这些类用作保存数据的模板,通常不包含getter/setter之外的函数。
Cairngorm框架有一个IValueObject接口,它不包含任何方法。
这是一个标记接口,它通过标识
Cairngorm
应用程序中用于在应用程序层之间传递数据的值对象的类来提高代码的可读性。
值对象是动作中的一个松散术语。 AS3 language reference here已将此术语用于传递给类的构造函数以初始化其属性的对象。
class Circle extends Shape
{
public var bgColor:Number = 0xFFFFFF;
public var radius:Number = 0;
public var xCenter:Number = 0;
public var yCenter:Number = 0;
public function Circle(initObj:Object)
{
//initialize properties from the value object.
for(var i:String in initObj)
{
this[i] = initObj[i];
}
draw();
}
public function draw():void
{
graphics.beginFill(bgColor);
graphics.drawCircle(xCenter, yCenter, radius);
graphics.endFill();
}
}
var firstInitObj:Object = new Object();
firstInitObj.bgColor = 0xFF0000;
firstInitObj.radius = 25;
firstInitObj.xCenter = 25;
firstInitObj.yCenter = 25;
//pass the value object to the constructor.
var firstCircle:Circle = new Circle(firstInitObj);
value对象的使用使得类的用户只能初始化他们希望的那些属性。此方法的替代方法(更强健,更容易出错的一个imo)是将每个属性指定为构造函数的参数并为其分配默认值。