Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Frage zur Aufgabe Woche 4
Nachdem Prof. Riehle ja nicht so detailliert auf die Neue Aufgabe eingegangen ist, stellt sich mir gerade die Frage, wie der Punkt
Extending Wahlzeit framework
◦ Create your domain Photo class, e.g. FlowerPhoto
◦ Extend ancillary classes as necessary (e.g. PhotoManager, PhotoFactory)
gemeint ist.
In meinem Kopf ist FlowerPhoto nur eine Extension für Photo. Somit wäre es ja eigentlich mit einem einfachen
public class FlowerPhoto extends Photo {
FlowerPhoto(){
super();
}
... etc.
}
getan. Das kann ich mir aber irgendwie nicht vorstellen, da die beiden anderen Beteiligten Klassen ja dann automatisch mit der spezialisierten Klasse zurecht kommen sollten…
Was übersehe ich, bzw. kann mir jemand mal ein bisschen genauer erklären, wie das gemeint ist? Hab in letzterer Zeit nicht viel mit OOP am Hut gehabt.
Ich denke, es muss dann auch einen FlowerPhotoManager und eine FlowerPhotoFactory geben.
Was die dann können müssen weiß ich jetzt aber auch nicht, habe mir die Aufgabe noch nicht wirklich angeschaut
Genau. Wenn Sie Wahlzeit um Ihre Domaene erweitern wollen, dann muessen Sie nicht nur die Klasse Photo sondern ggf. auch PhotoManager und PhotoFactory erweitern. Diese (und ggf. weitere) Klassen spielen zusammen. In ihrer FlowerPhoto Klasse sollten Sie dann ein paar Attribute einfuehren, die spezifisch fuer Ihre Domane sind.
Sie sollten wie zuvor dafuer sorgen, dass ihre Klassen (hier die FlowerPhoto Klasse) persistiert werden. Ins UI muessen Sie ihre neuen Attribute nicht einbauen (zu schwierg) (naja, nicht zu schwierig, nur zu nervig).
Nachdem ich mich jetzt an der Aufgabe versucht habe, weiß ich jetzt auch nicht, welche Anpassungen an den Klassen notwendig sind.
Kann der PhotoManager auch für Unterklassen von Photo verwendet werden (wie z.B. bei User/Moderator, einen ModeratorManager habe ich zumindest nicht gefunden)
Nach Mehrmaligem durchlesen von Prof Riehles Kommentar, bin ich zu dem Schluss gekommen, dass es wohl so gemeint ist, dass es ein extends PhotoManager und ein extends PhotoFactory werden soll. Kann gerade noch nicht überblicken, was das genau noch mit sich zieht. Schau mir den Code jetzt dann an. Achja und kann jemand mal kurz erklären, was mit persistent genau gemeint ist?
Wie mache ich denn das? Ich dachte es reicht die Referenz auf ein Location Objekt in die Photo Klasse zu legen.
Ich sehe auch nicht, in welchem Fall der PhotoManager denn erweitert werden müsste …
So wie ich die Persistenz verstehe wird Objectify verwendet:
https://github.com/objectify/objectify/wiki/Entities
Das bedeutet aus meiner Sicht das einfach Felder hinzufügen tatsächlich die Persistenz gewährleisten sollte (Solange du Felder zu Photo hinzufügst. Für geerbte Klassen gilt das NICHT automatisch). Ein implements Serializable kann aber sicher nicht schaden. Zum Thema wie Wahlzeit das speichert und lädt siehe:
loadPhotos() und savePhoto() in PhotoManager
Das sollte dir einen guten Anhaltspunkt geben wo du ansetzen kannst für deine eigenen Klassen bzw. was deine geerbte Klasse ändern sollte.
Weil es möglicherweise ein Stolperstein sein könnte, siehe auch OfyService.java.
Gibt es eine Möglichkeit zu überprüfen ob die Änderungen die man bei den jeweiligen Klassen gemacht hat den Anforderungen entsprechen?
Seht ihr beispielsweise in eurer developers console unter Storage->Datastore->Dashboard irgendwelche Einträge die z.B. klar machen das der Typ der Photos nun eben der der Unterklasse ist?
Ich habe bisher ein paar Sachen in den verschiedenen Klassen verändert und noch keine sichtbaren Resultate erzielt
Ich habe meine Factory so angepasst, dass die Attribute in meiner Photo-Unterklasse mit zufälligen Werten belegt werden und die kann ich auch in der Developer Console sehen
Wenn du in der Appengine Admin Oberflaeche bist gibt es auch den Unterpunkt DataStore links. Da kannst du dir die gespeicherten Entities anschauen. Die sollten auch immernoch von Typ Photo sein aber du siehst dann beim genauen Abfragen dass sie tatsaechlich DomainPhotos sind also deine Unterklasse wenn alles funktioniert.