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

Apache flex 在构造和初始化中使用值对象的缺点,apache-flex,actionscript-3,actionscript,Apache 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;

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

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

如果您计划使用并初始化
Monster
域对象的唯一方法(从DTO
MonsterVO
),则没有问题。但是你怎么能确定将来不会有其他用途呢?您不能在ActionScript(如Java)中重载构造函数。如果需要创建克隆,该怎么办?您必须为此创建一些假的
MonsterVO


我认为最好创建一些工厂方法来解决您的问题。

如果您想使用fa工厂,我认为这是一个很好的观点,您仍然可以使用使用配置对象的初始化机制

我会把它从构造器中移除,你

如果实现如下方法,可以通过更改VO来更改配置。这将是最简单的解决方案(不使用工厂或类似DI的方法)


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

这实际上取决于您要完成的任务。您将使用monster的上下文是什么。这是您的用例还是只是一个示例?为什么您的monster不知道它已经有多少触手?
public function configure(config:MonsterVO):void {
   for (var prop :String in config) {
        if ( config[prop] != null && this.hasOwnProperty(prop) ) this[prop] = config[prop];             
    }
}