ich habe da ein problem, eigentlich möchte ich mich mit MVC beschäftigen. und habe das beispiel vom deathbyaclown aus dem faq genommen, um mir das ganze mal etwas anzugucken.
habe das ganze ohne packete abgeschrieben, bisschen was angepasst und getest, das funzte auch.
jetzt wollte ich das ganze noch in packete aufteilen, so wie im beispiel:
Code:
package test.model; inhalt-vom Paket: Wind & enum Direction
package test.controller; inhalt-vom Paket: WindControllable & WindController// <-- hier ist die main-methode drin
package test.view; inhalt-vom Paket:WindViewer
aber nachdem ich das gemacht hatte ging nichts mehr. jetzt probiere ich hier schon die ganze zeit rum aber ich bekomme das nicht so hin wie im beispiel.
ich habe es jetzt nur zum laufen bekommen, weil ich die main-methode in eine eigene klasse geschrieben habe und die konstuktoren der klasse WindViewer und WindController public gesetzt habe:
das beispiel ist code maessig unvollstaendig - siehe in den Kommentaren im Beispiel.
Package maessig ist aber nichts fehlerhaft und das Bsp laeuft beim Einsetzen des fehlend Codes.
Es waere nett zu erfahren, was genau nicht bei dir funktionierte - kamen Fehlermeldungen oder was ?
noch ne frage, ich bin mir unsicher ob ich das mit dem interface richtig verstanden habe:
in deinem beispiel hast du ein interface, das ist doch eigentlich ohne wichtige funktion und ich könnte es eben so weglassen oder?
ich habe da noch ein anderes beispiel aus einem java-buch von karsten samschke (addison-wesley).
wenn ich das richtig verstanden habe, soll das interface dafür gut sein, das der code(z.B.die controll-klasse) austauschbar wird.
damit das inferface sinnvoll wird müsste ich doch sowas wie eine factory klasse schreiben etwa so:
Code:
public interface ControllerInterface()
{
public void machIrgendwas();
}
public class ControllerFactory
{
public static ControllerInterface newControllerInstance()
{
return new Controller();
}
}
und in der Viewerklasse schreibe ich dann nicht:
Code:
public class Viewerklasse
{
Controller controller;
Viewerklasse(Controller controller)
{
this.controller = controller;
}
}
statt dessen:
Code:
public class Viewerklasse
{
ControllerInterface controller = ControllerFactory.newControllerInstance();
Viewerklasse(ControllerInterface controller)
{
this.controller = controller;
controller.machIrgendwas();
}
}
so müsste ich doch in der viewer klasse nichts mehr ändern, wenn ich die controller klasse austausche.
oder hat das interface in deinem beispiel auch schon eine wichtig funktion?
das Interface Controllable wurde von mir nur eingefuegt um eine weitere Abstraktion zwischen View und Controller zu erstellen. D.h. die View ist nun nicht von einer direkten Implementation des Controllers abhaengig, sondern nur von dem Interface.
Wie du das Interface generierst ist dann dir ueberlassen. Das Benutzen einer Factory Klasse hat ja nichts mit der Funktionalitaet des Interfaces zu tun. Sie regelt ja nur das Instanzieren. Somit sind beide "Loesungen" korrekt
Factory ist dann sinnvoll, wenn du mehrer versch. Instanzierungen hast, die du dem Client "vorenthalten" willst. Sei es aus Sicherheitsgründen oder weils zu komplex ist. Du kannst mit Hilfe der Factory wesentlich mehr machen (z.b. Instanznen speichern usw). Somit ist es im Grunde nicht einfach dem Geschmack überlassen.
Ich halte es für das einfache Bsp für überflüssig weil eben diese Komplexität fehlt.