2016-07-04 10 views
0

Hallo Stackoverflowers ZugriffOOP Methode von nicht-verwandten Klasse

Ich habe 5 Klassen, Foo, Bar, Thud, Grunt, Zot. Thud und Grunt Instanzen sind das Feld von Bar. Foo Beispiel ist ein Feld von Thud.

Foo, Thud und Grunt bereiten Daten für eine Ansicht vor (MVVM-Muster, sie sind das Ansichtsmodell). Foo und Zot sind die Daten oder erstelle sie (das Modell)

Unter anderem produzieren Foo einige Zot in Grunt (hinzugefügt von Bar, die Foo von Thud zugreifen). Ich brauche Foo, um die Liste von Zot in Grunt zu bekommen. Wenn möglich, möchte ich vermeiden, die ganze Arbeit (wird die Liste serialisieren) in der Grunt- oder der Bar-Klasse, weil sie nicht das Modell sind. Der Prozess beginnt immer von Foo (neue Klassen oder Sachen Zugabe ist natürlich möglich)

public class Bar 
{ 
    Thud thud; 
    Grunt grunt; 

    Bar(Zot zotInstance) 
    { 
    new thud(); 
    new grunt(); 
    grunt.zotlist.add(zotInstance); 
    } 
} 

public class Thud 
{ 
    Foo foo; 
} 

public class Grunt 
{ 
    list<Zot> zotList; 
    public list<Zot> getList(); 
} 
public class Foo 
{ 
    public Zot makeZots() {}; 
    public void BringMeZots() // I would like a way to get the zotList when this method is called. 
} 

Ich bin nicht sicher, dass es auf die einfachste Art und Weise zu erklären. Sag mir, wenn eine andere Erklärung meines Problems benötigt wird.

Antwort

0

Sie brauchen also eine Möglichkeit, das Grunt Objekt zu teilen, das Sie erstellen.

Zuerst müssen Sie einen Weg, dies in Ihre Foo Klasse injizieren:

public class Foo 
{ 
    Grunt grunt; 

    public Foo(Grunt g) 
    { 
    grunt = g; 
    } 

    public Zot makeZots() 
    { 
    } 

    public void BringMeZots() 
    { 
    List<Zot> hereAreSomeZots = grunt.getList(); 
    } 
} 

Was bedeutet, dass Sie es in Ihre Thud Klasse injizieren müssen auch:

public class Thud 
{ 
    Foo foo; 

    public Thud(Grunt g) 
    { 
    foo = new Foo(g); 
    } 
} 

Dann endlich können Sie passieren Diese Grunt Instanz in Ihre Thud Instanz:

public class Bar 
{ 
    Thud thud; 
    Grunt grunt; 

    Bar(Zot zotInstance) 
    { 
    grunt = new Grunt(); 
    grunt.zotlist.add(zotInstance); 
    thud = new Thud(grunt); 
    } 
} 

Sie haben ziemlich abstrakte Klassennamen, so dass es schwierig für mich ist, zu sagen, was jede dieser Aufgaben tatsächlich tut, aber normalerweise, wenn ich sehe, dass Abhängigkeiten umgangen werden müssen, signalisiert dies Probleme mit dem Gesamtdesign.

Sie sollten sich die Abhängigkeitsinjektion ansehen, da dies auch Ihr Design vereinfacht.