Недостатки использования объекта стоимости в строительстве и инициализации - PullRequest
3 голосов
/ 30 мая 2011

Я хочу знать, есть ли какие-либо недостатки / недостатки использования объектов-значений при инициализации объекта, например:

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 ]

2 голосов
/ 30 мая 2011

Если вы планируете использовать и инициализировать свой доменный объект Monster единственным способом (из DTO MonsterVO) - проблем нет.Но как вы можете быть уверены, что в будущем не будет никаких других способов использования?Вы не можете перегружать конструктор в ActionScript (как в Java).Что если вам нужно создать клона?Для этого вам нужно будет создать фальшивку MonsterVO :(

Я думаю, что лучше создать фабричный метод для решения вашей проблемы.

0 голосов
/ 31 мая 2011

Если вы хотите использовать 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];             
    }
}

Обратите внимание, что вам нужно сделать ваши настраиваемые параметры доступными в качестве свойств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...