问题描述
|
我想知道在初始化对象时使用值对象是否有任何缺点/缺点,例如:
public class MonsterVO
{
public var tenticles : Boolean;
public var growl : GrowlType;
public var damage : int;
public var health : int;
}
public class Monster
{
private var tenticles : Boolean;
private var growl : GrowlType;
private var damage : int;
private var health : int;
public function Monster(monsterData : MonsterVO)
{
tenticles = monsterData.tenticles;
growl = monsterData.growl.clone();
damage = monsterData.damage;
health = monsterData.health;
}
}
解决方法
如果您打算使用和初始化(1ѭ域对象的唯一方法(来自DTO
MonsterVO
)—没问题。但是,如何确定将来是否没有其他用途呢?您不能在ActionScript中重载构造函数(例如Java)。如果需要创建克隆怎么办?为此,您必须创建一些假的MonsterVO
:(
我认为最好创建一些工厂方法来解决您的问题。
, 如果要使用fa Factory(我认为这是个不错的主意),则仍可以使用带有配置对象的初始化机制。
我会从构造函数中删除它。
如果实现以下方法,则可以通过更改VO来更改配置。这将是最简单的解决方案(不使用Factory或类似DI的方法)
public function configure(config:MonsterVO):void {
for (var prop :String in config) {
if ( config[prop] != null && this.hasOwnProperty(prop) ) this[prop] = config[prop];
}
}
注意,您需要将可配置选项用作属性。