Laden...

Entwurfsmuster Vermittler richtiger Ansatz?

Erstellt von citizen.ron vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.685 Views
citizen.ron Themenstarter:in
432 Beiträge seit 2005
vor 18 Jahren
Entwurfsmuster Vermittler richtiger Ansatz?

hallo leute,

ich bastele gerade an einer anwendungsarchitektur, die mir erlaubt, zur laufzeit ansichten, sog. "Views" aus DLL´s in mein Hauptfenster der Anwendung zu laden, das ganze folgt so ziemlich dem prinzip des cfd & microkernels.

Eine View könnte dabei "Projektmanagement" sein, eine andere "Kontakte".

Dabei ergibt sich natürlich die notwendigkeit, dass eine view manchmal fähigkeiten einer anderen view abrufen können muss, z.b.

  • View "Projekte" bietet als Kontextaufgabe "Neuer Vertrag (für dieses Projekt)"
  • View "Kontakte" bietet als Kontextaufgabe "Neuer Vertrag (für diesen Kontakt)"

zur lösung dieses problems hätte ich jetzt auf einen Mediator ("ViewBroker") zurückgegriffen, der sozusagen die veröffentlichten funktionen aller Views kennt und z.B. in folgender weise zum abruf anbietet:

 
class Contact : IView
{
  ...

  private void NewContract()
  {
    ViewBroker.DoAction("Projekte", 1, this.ContactID)
  }

  ...
}

wobei die View Contact ja aber immer noch "wissen" muss, dass für Projekte der ActionCode 1 bedeutet "Neuen Vertrag für nachstehende ContactID", ActionCode 2 "TuWasAnderes", etc.

wird dadurch das prinzip der losen kopplung nicht wieder verletzt?

oder ist mediator eh der falsche ansatz?

was meint ihr

d.i.v.

ron

citizen.ron Themenstarter:in
432 Beiträge seit 2005
vor 18 Jahren

also,

mein cleverer azubi ist folgerichtig auf delegaten gesprungen, und das wäre ein ausreichender lösungsansatz:

wenn der ViewBroker die Methoden eines Delegaten implementiert, der in der Schnitstelle IView deklariert ist, z.B.

 
   delegate void ViewAction(object sender, int actionCode);

ist ein zusätzlicher Vermittler nicht mehr nötig.

Vielleicht werde ich später mal ein passendes Beispiel einer solchen Implementierung hier ins Forum stellen.

Gruß

Ron