Iniezione di fabbrica nell'oggetto creato in fabbrica

0
public class Factory 
{
   public INode CreateNode(TypeEnum type)
   {
       switch(type)
       {
           case TypeEnum.Document:
               return new DocumentNode(this);
           case TypeEnum.Item:
               return new ItemNode();
       }
   }
}

public interface INode
{
    void DoAction();
}

public class ItemNode : INode
{
    void DoAction()
    {
        // Nothing to do or simple action without more childs.
    }
}

public class DocumentNode : INode
{
    private Factory factory;

    public Node(Factory factory)
    {
        this.factory = factory;
    }

    public void DoAction()
    {
        var nodeTypes = this.GetNodeTypes();
        foreach (var value in nodeTypes)
        {  
            var node = this.factory.CreateObject(value);
            node.DoAction(otherValues);
        }
    }

    private IEnumerable<TypeEnum> GetNodeTypes()
    {
        // Retrieve values here... Could be DocumentNode or ItemNode types.
    }
}

È un approccio valido e ha senso iniettare la factory utilizzata per creare un'istanza di classe nell'istanza creata stessa per usarla (come un albero)?

    
posta HuorSwords 13.07.2016 - 09:31
fonte

1 risposta

1

Sì. Se un oggetto ha bisogno di creare un altro oggetto del proprio tipo (o di un tipo correlato se si ha una fabbrica che costruisce una famiglia di tipi), allora la soluzione più sensata a me sembra iniettare la sua fabbrica al momento della creazione. In effetti, non vedo davvero alcuna alternativa a questo approccio che non perda i benefici dell'utilizzo completo delle fabbriche.

    
risposta data 13.07.2016 - 10:08
fonte

Leggi altre domande sui tag