我想知道在初始化对象时是否存在使用值对象的缺点/缺点,例如:
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;
}
}
答案 0 :(得分:2)
如果您计划以唯一的方式(来自DTO Monster
)使用和初始化您的MonsterVO
域对象 - 则没有问题。但是如何确定将来是否会有其他用途呢?您不能在ActionScript中重载构造函数(如在Java中)。如果您需要创建克隆怎么办?你必须为此创建一些假的MonsterVO
:(
我认为最好创建一些工厂方法来解决您的问题。
答案 1 :(得分:0)
如果你想使用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];
}
}
请注意,您需要将可配置选项作为属性提供。