2017-02-24 2 views
0

Lets sagen, ich habe eine Reihe von bedingten Anforderungen, die ineinander in einer baumartigen Struktur geschachtelt werden können, aber alle Anforderungen müssen mit verschiedenen Subsystemen kommunizieren, um herauszufinden, ob sie sind erfüllt. Zum Beispiel könnte eine Anforderung prüfen, ob ein bestimmtes Inventarelement vorhanden ist, ob ein Objekt auf ein bestimmtes Attribut überprüft wird, ob ein Ereignissystem ausgelöst wird, um zu sehen, ob ein bestimmtes Ereignis ausgelöst wurde usw. Wie könnten Sie dies modellieren, so dass Sie das Objekt durchlaufen können Baum als eine Teil-Ganzes-Hierarchie, aber auch jedem Knoten ermöglichen, mit dem Subsystem zu kommunizieren, das es benötigt?Verknüpfen lose zusammengesetzte Objektknoten und ihre Abhängigkeiten

Antwort

0

Es scheint so, als ob Sie die Aggregation und die spätere Verwendung der Abhängigkeitsinjektion modellieren sollten (siehe What is dependency injection?), um zu verlangen, welches Objekt die gewünschten Funktionen erfüllen sollte.

Jeder Knoten wäre wie ein domain model.

Etwas wie folgt aus:

public class A 
{ 
    // You inject some service IServiceX 
    public A(IServiceX serviceX) 
    { 
     ServiceX = serviceX; 
    } 

    private IServiceX ServiceX { get; } 

    // B is associated to A 
    public B B { get; set; } 

    // So you can do some stuff calling the whole ServiceX 
    public void DoStuff() 
    { 
     ServiceX.DoWhatever(); 
    } 
} 

public class B 
{ 
    public B(IServiceY serviceY) 
    { 
     ServiceY = serviceY; 
    } 

    private IServiceY ServiceY { get; } 

    // C is associated to B 
    public C C { get; set; } 

    public void DoStuff() 
    { 
     ServiceY.DoWhatever(); 
    } 
} 

public class C 
{  
    public C(IServiceZ serviceZ) 
    { 
     IServiceZ = serviceZ; 
    } 

    private IServiceZ IServiceZ { get; } 

    public void DoStuff() 
    { 
     IServiceZ.DoWhatever(); 
    } 
} 

Offensichtlich könnten Sie mehr als einen Dienst in einigen dieser Aggregate injizieren. Da jedes Aggregat mit einem anderen verknüpft wird, sollten Sie auch den Baum durchqueren können.

+0

Ich meinte die Kopplung der Subsysteme mit dem Knoten nicht die Knoten im Baum. Ich denke, Abhängigkeitsinjektion sieht vielversprechend aus. Ermöglicht die Injektion von Abhängigkeiten das Injizieren eines Objekts, das bereits instanziiert wurde, oder injiziert es eine neue Instanz für jeden Konstruktor oder jede Eigenschaft? – Adam1980

+0

@ Adam1980 Sie können vorhandene Instanzen injizieren. Caslte Windsor kann es, ich weiß nicht, ob andere diese Fähigkeit besitzen. Zum Beispiel 'container.Register (Component.For () .Instance (Instanz))' –

+0

@ Adam1980 BTW wahrscheinlich möchten Sie die Instanz nicht selbst erstellen, sondern verwenden Sie einen gebundenen Lebensstil wie Castle Windsor bietet auch. Siehe https://github.com/castleproject/Windor/blob/master/docs/lifestyles.md#bound-to-nearest –

Verwandte Themen