turk porno porno escort rokettube
Ergebnis 1 bis 8 von 8

Thema: Beispiel aus dem Buch 1 Entity = 1 Modul und Beziehungen

  1. #1
    Neuer Benutzer
    Registriert seit
    07.05.2013
    Beiträge
    5
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard Beispiel aus dem Buch 1 Entity = 1 Modul und Beziehungen

    Beim Lesen des Buches hat mich ein wenig verwundert, das der Autor pro Business-Logik Entität je ein eigenes Modul mit Model, InputValidator und anderen Daten anlegt.

    Dabei entstehen für mich zwei Fragen:

    1. Zum einen könnte es leicht eine große Abhängigkeit zwischen diesen Entitätsmodulen geben. Aber ist nicht grad die Unabhängigkeit das Ziel von Modulen?

    2. Zum zweiten: wie stellt sich der Autor das Handling mit Relationen zwischen den Entitäten vor?

    Ein Beispiel:
    Angenommen man hat Bilder und Videos als jeweils eine Entität. Als dritte Entität gibt es Tags. Die Tags liegen in einer eigenen Datenbanktabelle und sind per n:m Relation jeweils mit Videos und Bildern verknüpft. Wenn ich jetzt ein Bild "tagge" dann möchte ich die ins Formular eingegeben Tags beim Speichern der Bild-Informationen gleich mitspeichern. Das gleiche möchte ich beim Video. Also muß ich schon mal dafür sorgen das alle Module vorhanden sind.
    Desweiteren müßte ich mir überlegen, wo ich die TableObjekt Klassen für die Verknüpfungstabellen ablege (ins ImageEntity-Modul als Image2TagTable.php oder ins TagEntity-Modul als Tag2Image.php?

    Mein Ansatz wäre, dass das TagEntity Modul eine Art "TagSaveListener" bekommt. Dieser lauscht auf diverse Ereignisse ("Video Saved, Image saved") und wird dann aktiv, wenn die Ereignisse eintreten. Letzteres hätte den Vorteil, dass, im Falle des Fehlens des TagEntity Moduls, zwar keine Tags gespeichert würden, aber auch kein systemseitiger Fehler (fehlendes Modul TagEntity) auftritt. Ist dieser Ansatz tauglich?

  2. #2
    Erfahrener Benutzer Avatar von Ralf
    Registriert seit
    14.12.2006
    Beiträge
    450
    Thanks
    0
    Thanked 47 Times in 37 Posts

    Standard

    Hallo gelleneu,

    an sich ist das nicht ganz richtig. Ich verwende im Zend\Expressive und im Zend\Mvc Teil ja verschieden komplexe Model-Layer. Bei der Middleware Anwendung ist die etwas einfacher gehalten ohne Entitäten, aber dort finden sich im Pizza Modul zumindest zwei Repositories, die sowohl einzeln als auch kombiniert verwendet werden können.

    https://github.com/zf3buch/vote-my-p...del/Repository

    Zu 1. Man muss man den Abhängigkeiten der Module immer darauf aufpassen, wie diese Abhängigkeiten wirken. Es ist kein Problem, wenn Modul A von B abhängig ist. Wenn dann zugleich aber auch Modul B von A abhängig ist, wird es kompliziert. Selbstverständlich kannst du auch mehrere Entitäten in einem Modul vorhalten, solange diese in einem sinnvollen Zusammenhang stehen. So macht es keinen Sinn, in einem Shop, die Bestellung von den Bestellpositionen zu trennen. Ich würde aber nie die Bestellungen und die Produkte, die ja Teil einer Bestellung sind, in demselben Modul vorhalten. Da kommt es immer auf den Einzelfall an. Dass Datenmodell im Buch ist eher einfach gehalten, da der Fokus in erster Linie auf dem Einsatz der ZF3 Komponenten liegt. Ursprünglich wollte ich beim Domain-Layer noch etwas mehr in die Tiefe gehen. Dies konnte ich aus Zeit- und Platzgrünen aber nicht mehr adäquat realisieren.

    Zu 2. Bei dem Fall würde ich die Tags tatsächlich in einem eigenen Modul vorhalten, da sie in verschiedenen Modulen (Bilder und Videos) gebraucht werden. Somit sollte die Table und Entity Klasse auch im Tag Modul liegen. Das Laden der Daten könnte dann ein Domain-Service übernehmen, der mit den beiden Entitäten / Repositories für Videos und Tags zusammenarbeiten kann.

    Ich hoffe, ich konnte etwas Licht ins Dunkle bringen.

    Gruß,

    Ralf

  3. #3
    Neuer Benutzer
    Registriert seit
    07.05.2013
    Beiträge
    5
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Hallo Ralf,

    vielen Dank für deine Antwort. Im Großen und Ganzen sehe ich das auch so. Am Anfang fand ich den Gedanken, ein Model in ein eigenes Modul zu packen sehr gewöhnungsbedürftig. Aber je mehr man damit arbeitet, desto schöner und sauberer ist das Ganze. Klar sind Produkte und Bestellungen getrennte Module. Bei Preisen wird es schon schwieriger. Zunächst wäre jeder Preis sehr produktspezifisch. Allerdings nimmt die Bedeutung von Preisen (Aktionspreise etc..) sehr stark zu, so daß es auch hier sinnvoll sein könnte die in ein eigenes Modul zu packen. Um ehrlich zu sein habe ich mich mit dem Middleware Ansatz noch nicht so stark beschäftigt. In der Firma wird es erstmal wichtig sein, das bestehende ZF1 Projekt auf ZF3 zu migrieren und der MVC-Ansatz ist im Team noch zu stark "state of the art".

    Eine Sache habe ich noch: im Repository wird mittels createAdvertFromData immer ein AdvertModel angelegt, welches per nextId sofort eine gültige ID aus der Datenbank bekommt. Dies begründest du damit, das ein Model nur MIT gültiger ID vollständig ist. warum gibt es dann in der saveAdvert Methode den Ansatz "insertAdvert" aufzurufen, wenn die ID des Models null ist? Nach meinem Verständnis dürfte dies niemals auftreten, da saveAdvert immer nur mit einem Model aufgerufen wird, welches eine gültige ID bereits besitzt. Oder?
    Geändert von gelleneu (21.12.2016 um 22:10 Uhr)

  4. #4
    Erfahrener Benutzer Avatar von Ralf
    Registriert seit
    14.12.2006
    Beiträge
    450
    Thanks
    0
    Thanked 47 Times in 37 Posts

    Standard

    Hallo gelleneu,

    damit hast du natürlich recht. Eigentlich dürfte es niemals auftreten. Es ist aber als Fallback gedacht, falls jemand eine Annonce speichert, ohne dieses vorher createAdvertFromData() aufgerufen zu haben. Alternativ könnte man an der Stelle auch eine Exception werfen, wenn keine ID gesetzt ist.

    Gruß,

    Ralf

  5. #5
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von Ralf Beitrag anzeigen
    Alternativ könnte man an der Stelle auch eine Exception werfen, wenn keine ID gesetzt ist.
    Wenn das Objekt „AdvertModel“ nur gültig mit einer ID ist, warum nicht die ID bei der Erstellung voraussetzen? (Konstruktor)
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  6. #6
    Erfahrener Benutzer Avatar von Ralf
    Registriert seit
    14.12.2006
    Beiträge
    450
    Thanks
    0
    Thanked 47 Times in 37 Posts

    Standard

    Weil das Zusammenspiel mit Zend\Hydrator und Zend\Db nur richtig klappt, wenn man ein AdvertModel auch mit NULL Werten befüllen kann. Ich weiß, dass ist dies nicht optimal ist, aber der Ansatz erhebt auch keinen Anspruch darauf, dass er nicht weiter verbessert werden kann. ;-)

    Gruß,

    Ralf

  7. #7
    Neuer Benutzer
    Registriert seit
    07.05.2013
    Beiträge
    5
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Okay, jetzt finde ich deine Antwort fast schade, nämlich das es "nur" Fallback sein sollte. Es ist nämlich tatsächlich fast ein philosophischer Ansatz: in deinem Falle würden nämlich die Unterscheidungen in "insertAdvert" und "updateAdvert" im Repository und im Storage entfallen können da es nur noch ein "save" gäbe. Andererseits hat die Variante auch Nachteile, wenn der Speichervorgang nach dem Erstellen der ID unterbrochen bzw. abgebrochen wird...

    Na gut, jetzt ist erstmal Weihnachten! Dir und deinen Angehörigen ein frohes Fest und einen guten Rutsch ins Neue Jahr!

  8. #8
    Erfahrener Benutzer Avatar von Ralf
    Registriert seit
    14.12.2006
    Beiträge
    450
    Thanks
    0
    Thanked 47 Times in 37 Posts

    Standard

    Ja, wie gesagt, ist der Ansatz im Buch sicherlich nicht der Weisheit letzter Schluss. In der Praxis komme ich bei den von mir betreuten Projekten, die diesen Ansatz verfolgen, aber gut zurecht. Deshalb hat er auch seinen Weg ins Buch gefunden. Und wegen der Save Methode, klar ließe sich der Fallback durch das Prüfen des Zustands und das Werfen einer Exception auch umgehen. Aber wie gesagt, Verbesserungspotential hat sicherlich jeder Ansatz.

    Dir auch ein Frohes Fest und einen Guten Rutsch ins Jahr 2017!

    Gruß,

    Ralf

Ähnliche Themen

  1. Antworten: 28
    Letzter Beitrag: 14.10.2014, 17:47
  2. Antworten: 2
    Letzter Beitrag: 05.04.2010, 10:12
  3. Methode aus Modul B in Modul A aufrufen?
    Von klaus24 im Forum Core
    Antworten: 9
    Letzter Beitrag: 18.01.2010, 19:22
  4. Zend_Db und n:m Beziehungen
    Von eztam im Forum DB
    Antworten: 3
    Letzter Beitrag: 13.03.2009, 13:42
  5. Vor-/Nachteile von ZF aus ZF Buch?
    Von divB im Forum Einsteigerfragen
    Antworten: 9
    Letzter Beitrag: 31.08.2008, 13:10

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •