2009-11-17 7 views
5

Kann jemand vielleicht hier erklären, warum in der Welt CakePHP eine Konvention der Verwendung von Pluralnamen für db-Tabellen und -Controller und Singular für Modelle hat? Warum nicht immer Singularbegriffe oder immer Plural verwenden? Für mich ist es verwirrend, immer denken zu müssen: "Benutze ich hier Plural oder Singular?" (Oder gibt es einen einfachen Weg sich zu erinnern?) Und dann haben Sie die Join-Tabellen, die eine Kombination aus beiden verwenden!Warum verwendet CakePHP unterschiedliche Plural/Singular-Namenskonventionen?

Ich nehme an, es gibt irgendwo einen guten Grund, aber ich bin einfach nicht darauf gestoßen.
(Ich hoffe wirklich, es ist nicht nur, weil Ruby on Rails auf diese Weise funktioniert.)

Simon.

+2

Es ist wahrscheinlich wegen Rubin auf Schienen :) –

+1

Keine Ahnung. Wir verwenden immer die optionalen Felder 'name', 'table' und 'primaryKey' (siehe Dokumentationen), um die Dinge so zu benennen, wie wir wollen. Wir kapitalisieren, was wir wollen, wann wir wollen, und lassen alles einzigartig. Ansonsten mag ich Cake wirklich. – nilamo

+0

Es könnte auch sein, weil CakePHP von Leuten entworfen wurde, die PHP verwenden, das per Definition inkonsistent ist. –

Antwort

10

CakePHP Conventions

haben CakePHP Konventionen wurden aus Jahren der Web-Entwicklung Erfahrung und Best Practices destilliert. Während wir empfehlen, diese Konventionen während der Entwicklung mit CakePHP zu verwenden, sollten wir erwähnen, dass viele dieser Grundsätze leicht außer Kraft gesetzt werden können - etwas, das besonders nützlich ist, wenn Sie mit Legacy-Systemen arbeiten.

Ich denke, dass es die Idee ist, es flüssiger zu lesen und Elemente in der richtigen Weise zu denken. Datenbanktabellen sind immer plural, da sie viele Datensätze enthalten. Das Modell ist einzigartig, weil Sie darüber nachdenken sollten, einen einzigen Datensatz damit zu finden. Ein Auswahlfeld für model_id erhält automatisch seine Optionen von $models, weil Sie einen von vielen auswählen.

$model = $this->Model->find('first'); // reads like English 
$model = $this->Models->find('first'); // slightly trips you up 

$models = $this->Model->find('all'); // works okay 
$models = $this->Models->find('all'); // more logical, but "this models" still trips 

Es ist nicht immer perfekt, aber ich denke, es ist eine ganz schön Konvention sobald man sich daran gewöhnen. Ich kann sehen, wie es am Anfang verwirrend sein kann.

+2

Einverstanden. Das Modell ist eine Abstraktion für Ihren Datenmodus, und im Englischen sind das immer Singular (Sie sagen nicht "Was ist die Essenz von Autos"). Der Controller behandelt mehrere Instanzen der Abstraktion (sie streitet sie alle). IMO, es ist ziemlich konsistent mit, wie wir Dinge auf Englisch tun. –

4

Gibt es einen einfachen Weg sich zu erinnern?

Ja, in Bezug auf die Teile, in denen Namenskonvention zählt (db/model/Controller) ... Wenn es nicht der Name eines Modells ist (dh. User) oder den Namen eines Fremdschlüssels (dh. user_id), dann ist es Plural. Abgesehen von diesen beiden Dingen ist alles im Plural.