Frage

kam gerade über die Lehre Projekt, die ein Object Relational-Mapper und eine DB-Abstraktionsschicht hat. Was bietet Lehre, dass auch andere PHP Abstraktionsschichten nicht? Und praktisch, was die Verwendung können Sie die ORM gestellt, abgesehen von Objekten über Abfragen geschrieben in Lehre Query Language holen? Ist die Abfragesprache wirklich etwas, was Sie wollen einen kompletten Web-App in Entwicklung? Ist es eine gute Leistung?

Im Großen und Ganzen hat den Aufbau eine App auf Lehre macht es leichter zu pflegen und zu verstehen? Ist es over-engineered, und baut auf eine Abstraktionsschicht sinnvoll für kleine bis mittelgroße Projekte? (<50 GUI-Bildschirm), im Gegensatz zu direkt mit MySQL arbeiten.

War es hilfreich?

Lösung

  

Was bedeutet Lehre bietet, dass andere PHP Abstraktionsschichten nicht?

  1. Ernte- DataMapper Muster eher Active.
  2. Unterstützung Anmerkungen , XML und YAML für Schema.
  3. Verwendet DQL .
  4. Uses Vorteile von PHP 5.3 +.
  5. Sie schnell und hat große Gemeinschaft.
  6. Mit Ausnahme ORM gibt es ODM.
  

Ist die Abfragesprache wirklich etwas, das Sie in ein ganzes Web-App entwickeln wollen?

Nur ein Teil der Anwendung verantwortlich für die Aufrechterhaltung der Geschäfts-Objekte sollten von der Existenz der Lehre bewusst sein. Und das Teil nicht über 100% Lehre basiert sein.

  

Im Großen und Ganzen hat den Aufbau einer App auf Lehre machen es leichter zu pflegen und zu verstehen?

Auf jeden Fall. Der Code ist einfacher zu lesen, zu verstehen und zu pflegen.

  

Ist es over-engineered, und ist es sinnvoll, für kleine bis mittelgroße Projekte?

Eigentlich ist Lehre ganz einfach in seinen Grundzügen. Und es ist eine sehr gute Wahl für kleine, mittlere und sogar einige große Anwendungen.


Lehre ist nicht die Antwort für alles und manchmal ist es ein wenig problematisch. Doch für typische Aufgaben ist es äußerst nützlich. IMHO die beste ORM / ODM für PHP in diesem Moment.

Andere Tipps

Ich möchte ein paar Punkte zu Crozin Antwort hinzufügen, aber leider kann es nicht kommentieren. Hier sind sie:

  • Lehre keine magische Methoden __get () und __set (), um Zugang Entitätsattribute alle die Einheit Attribute sollten Getter / Setter haben. Dies verbessert die IDE Code-Vervollständigung und Sie nicht zu Blick auf DB-Tabellenstruktur die ganze Zeit brauchen.
  • Lehre abstrahiert Sie völlig aus realer Tabelle Feldnamen. Sobald Sie Elementeigenschaften zu DB Felder abgebildet - verwenden Sie Eigenschaftsnamen überall. Das Gleiche gilt für Tabellennamen.
  • Lehre verwendet Repository-Muster, das die Details des Erhaltens Einheiten versteckt.
  • Lehre nutzt „Code zuerst“ -Ansatz, so dass Sie Entitäten zunächst erstellen und anschließend Datenbank automatisch für sie generieren. Umgekehrte Fall ist möglich.
  • Lehre mächtig Query Builder hat, so dass Sie Builder-Muster für Abfragen mit bedingten Teilen nutzen können.
  • Lehre verwendet Fremdschlüssel und Einschränkungen Kaskade Aktionen auszuführen und zu halten Daten konsistent.
  • Lehre der UnitOfWork ist eine ziemlich große und intelligente Sache, die kein Analogon in anderen PHP ORMs hat

IMHO zur Zeit Lehre bietet beste IDE Code-Vervollständigung Unterstützung und DB-Schicht Abstraktion unter allen PHP ORMs zur Verfügung. Es ist nicht over-engineered und folgt SOLID Prinzipien.

Ich möchte einen Punkt zu GerKirill Antwort hinzuzufügen. Das Fehlen von Unterstützung für magische Getter / Setter-Methoden ist eine Schwäche, IMHO, nicht eine Stärke. Wenn Sie jemals durch Dutzende von Seiten identischen Getter / Setter gescrollt haben, werden Sie feststellen, dass diese Methoden eine riesige Verschwendung von Raum sind (nicht die Kompilierung ganz zu schweigen). Niemand versehentlich eine Objektvariable setzt, und ein Setter nicht verhindern, dass Sie zu tun, dass ..., wenn Sie die Eigenschaft ändern möchten, müssen Sie nur die Setter nennen (wie funktioniert ein Setter „schützen“ die Eigenschaft - wenn Sie würde einen Tippfehler machen und direkt in dem falsche Eigenschaft Wert gesetzt, werden Sie die gleichen Tippfehler machen und die falschen Setter nennen). Und es ist sehr selten, dass ein Setter oder Getter etwas anderes als get zu tun oder eine Eigenschaft festgelegt. Wenn Sie etwas Besonderes Satz zu tun haben oder eine Eigenschaft zu erhalten, sollte diese Eigenschaft eine Methode (siehe http://www.yegor256.com/2014/09/16/getters-and-setters-are-evil.html ), oder sollten Sie Refactoring sein Ihr Code, oder sollten Sie eine Eigenschaft Validierungsfunktion (in der Regel zu dem Zeitpunkt das Objekt erstellt wird) anrufen. Dies ist einer jener un-herausgefordert Binsenwahrheiten, die die OO Welt plagen. Denken Sie darüber nach, bevor Sie den Standard erhalten Weisheit Antwort senden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top