3 Stimmen

Nachteile der Verwendung eines Wertobjekts bei Konstruktion und Initialisierung

Ich möchte wissen, ob es Nachteile bei der Verwendung von Wertobjekten bei der Initialisierung eines Objekts gibt, zum Beispiel:

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

2voto

Constantiner Punkte 14211

Wenn Sie die Verwendung und Initialisierung Ihrer Monster Domänenobjekt der einzige Weg (von DTO MonsterVO ) - es gibt kein Problem. Aber wie können Sie sicher sein, dass es in Zukunft keine weiteren Verwendungen geben wird? Man kann den Konstruktor in ActionScript nicht überladen (wie in Java). Was ist, wenn Sie einen Klon erstellen müssen? Dann müssen Sie eine Fälschung erstellen MonsterVO dafür :(

Ich denke, es ist besser, eine Factory-Methode zu erstellen, um Ihr Problem zu lösen.

0voto

goliatone Punkte 2175

Wenn Sie fa Factory verwenden wollen - was ich für einen guten Punkt halte - könnten Sie immer noch einen Initialisierungsmechanismus mit einem Konfigurationsobjekt verwenden.

Ich würde sie allerdings aus dem Konstruktor entfernen.

Wenn Sie eine Methode wie die folgende implementieren, können Sie das, was Sie konfigurieren, ändern, indem Sie die VO ändern. Dies wäre die einfachste Lösung (ohne Verwendung von Factory oder einem DI-ähnlichen Ansatz)

public function configure(config:MonsterVO):void {
   for (var prop :String in config) {
        if ( config[prop] != null && this.hasOwnProperty(prop) ) this[prop] = config[prop];             
    }
}

Beachten Sie, dass Sie Ihre konfigurierbaren Optionen als Eigenschaften zur Verfügung stellen müssen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X