Als Anfänger in der Programmierung stört es mich immer, wenn ich in eine Wand renne. Gegenwärtig sind eine der Wände co-abhängige Objekte.Java MVC - Fühle mich nicht wie ich es bekomme
Wie Sie in meinem Frageverlauf sehen können, arbeite ich gerade an einer Blackberry-Anwendung, in der ich etwas implementiert habe, das ich das MVC-Muster nenne, aber es ist nicht genau das, was ich denke.
Sie sehen, ein Anfänger Programmierer Sie auf Abstracts wie diese Grafik schauen und Sie bekommen die Idee dahinter. Aber es umzusetzen ist eine andere Sache.
alt text http://www.ibm.com/developerworks/wireless/library/wi-arch6/theoretical.gif
Bitte, hör nicht auf zu lesen :) Ich zeige Ihnen einige von mir Code, der etwas Brombeere spezielle Sachen enthält, aber Sie sollten sehen, was ich tue.
Haupteinstiegspunkt für meine Anwendung
public class ContactManager extends UiApplication
{
private static ContactManagerMainScreenModel MainScreenModel = new ContactManagerMainScreenModel();
private static ContactManagerMainScreen MainScreenView = null;
public static void main(String[] args)
{
new ContactManager().enterEventDispatcher();
}
public ContactManager()
{
MainScreenView = new ContactManagerMainScreen(MainScreenModel);
// Displays the Splashscreen then opens the Mainscreen
new SplashScreen(UiApplication.getUiApplication(), MainScreenView);
}
}
Die Hauptseite Modell
public class ContactManagerMainScreenModel
{
ContactManagerMainScreen v;
// Loading Local Storage
LocalContactStorage LocalContactStorage = new LocalContactStorage();
// Define Data List
private Vector vContacts_Favorites;
public void register(ContactManagerMainScreen v)
{
this.v = v;
}
// Retrieve Favorite Contacts from Persistant Storage
public Vector getFavoriteContactsFromLocalStorage()
{
vContacts_Favorites = LocalContactStorage.getFavoriteContactsFromLocalStorage();
return vContacts_Favorites;
}
// Put Retrieve Favorite Contacts from Persistant Storage
public void saveFavoriteContactsToLocalStorage()
{
LocalContactStorage.saveFavoriteContactsToLocalStorage(vContacts_Favorites);
}
}
Die MainScreenController
public class ContactManagerMainScreenController
{
private ContactManagerMainScreenModel _model = null;
private ContactManagerMainScreen _view = null;
public ContactManagerMainScreenController(ContactManagerMainScreen view, ContactManagerMainScreenModel model)
{
this._model = model;
this._view = view;
}
public void HideFavoriteList()
{
if(this._view._ContactList.getManager() != null)
{
this._view._ContactList.getManager().delete(this._view._ContactList);
} else
{
this._view._bottom_box.add(this._view._ContactList);
}
}
}
Immer noch da? Okay ...
Mein Problem hier ist, dass ich den Controller verwenden möchte, um UI-Elemente zu ändern, wie Anzeigen einer PopUp-Box, etwas oder andere Dinge ausblenden.
Aber alle diese UI-Elemente sind in der Ansicht (hier ContactManagerMainScreen) definiert, so dass Sie dem Controller einen Verweis auf die Ansicht geben müssen. Was zu meinen mit-abhängigen Objekten führt, Elend.
Ich kann den Controller nicht erstellen, bevor die Ansicht deklariert wird. Ohne die Anforderung, dem Controller zu erlauben, UIElements zu ändern, wäre dies kein Problem (wie in den Grafiken gezeigt).
Was jetzt ist ich tue, dass die Ansicht des Controllers Hat
controller = new ContactManagerMainScreenController(this , model);
das macht Sinn schafft? Ich möchte das Muster verstehen, also nenne meinen Code Müll oder was auch immer du magst :) Ich will nur etwas lernen.
P.S. Ich bitte um Entschuldigung für mein schlechtes Englisch :)
+1 stimme ich voll und ganz zu. – neuro
+1 Dies entspricht auch meiner Erfahrung. – Zarkonnen
(Obwohl, wenn irgendjemand * einen Standpunkt vertreten kann, wie man die Ansicht und den Controller vernünftig trennt, wäre ich sehr interessiert.) – Zarkonnen