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
0
A
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.
Verwandte Themen
- 1. Maven-Assembly-Plugin enthält spezifische Abhängigkeiten und ihre transitiven Abhängigkeiten
- 2. Lose Klassenkopplung und Datenzugriff
- 3. Enge und lose Kopplung
- 4. Wo setzen Sie Ihre Abhängigkeiten?
- 5. CMake und andere Projekte und ihre Abhängigkeiten finden
- 6. Alle Abhängigkeiten zu LLVM Bitcode kompilieren und verknüpfen
- 7. @ OneToMany und zusammengesetzte Primärschlüssel?
- 8. Was ist lose Kopplung?
- 9. Benutzerdefinierte zusammengesetzte Ansicht und .findViewById()
- 10. Entfernen Sie die Show-Methode und alle ihre Abhängigkeiten
- 11. ECL - dump c source für jede Kompilierungseinheit und ihre Abhängigkeiten?
- 12. Aldryn - wie man eigene Django-Apps und ihre Abhängigkeiten hinzufügt
- 13. Wie man eine Luftstromaufgabe und alle ihre Abhängigkeiten laufen lässt?
- 14. Doktrin und zusammengesetzte eindeutige Schlüssel
- 15. Lose Kopplung von Apps und Modellvererbung
- 16. lose gekoppelte Entwicklung
- 17. Lose Kupplung in Zusammensetzung
- 18. MVVMCross 4.1.4 Zusammengesetzte Ansichten
- 19. Zusammengesetzte Fremdschlüsseleinschränkung
- 20. Zugreifen auf zusammengesetzte Datenfensterobjekte
- 21. ng2-bootstrap wählen und Funkgeräte lose Funktionalität auf Handy
- 22. nHibernate - gespeicherte Prozeduren und zusammengesetzte Schlüssel
- 23. Lehre 2 zusammengesetzte Schlüssel und DQL verbindet
- 24. Komponist, Mindeststabilität und Abhängigkeiten von Abhängigkeiten
- 25. MVVM: lose Kopplung von Viewmodels
- 26. Maven-Unterprojekte - sollten sie ihre eigenen Abhängigkeiten haben
- 27. Wie verwalten Sie externe Abhängigkeiten für Ihre Anwendung?
- 28. Wie können Sie sicherstellen, dass Ihre npm-Abhängigkeiten sicher sind?
- 29. Verknüpfen mehrerer Tabellen und Ansichten
- 30. Wie werden Gradle-Abhängigkeiten auf ihre neueste Version aktualisiert?
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
@ 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))' –
@ 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 –