在构造和初始化中使用值对象的缺点

时间:2011-05-30 19:42:00

标签: flex actionscript-3 actionscript

我想知道在初始化对象时是否存在使用值对象的缺点/缺点,例如:

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;
    }
}

2 个答案:

答案 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];             
    }
}

请注意,您需要将可配置选项作为属性提供。