Wenn ich eine Entität habe und ich möchte speichern, validieren oder löschen. Warum muss ich die Table-Methode aufrufen? Zum Beispiel:CakePHP 3: Aufruf von Tabellenfunktionen von Entity ist eine schlechte oder gute Idee?
$articlesTable = TableRegistry::get('Articles');
$article = $articlesTable->get(12);
$article->title = 'CakePHP is THE best PHP framework!';
$articlesTable->save($article);
Warum ist nicht so:
$article->save();
oder $article->delete();
Es ist sehr einfach zu implementieren:
Auf meinem Artikel Entity ich tun kann, es mag:
namespace App\Model\Entity;
use Cake\ORM\Entity;
class Article extends Entity
{
public function save()
{
$table = TableRegistry::get($this->source());
$table->save($this);
}
}
Es funktioniert, aber ich würde gerne wissen, ob es eine schlechte Übung oder eine gute Idee ist.
Vielen Dank im Voraus :)
Ich möchte mehr über diesen Ansatz lernen. Ich hatte es vorher nicht für Table vs Entity Klassen in CakePHP in Betracht gezogen und ich habe diese Absicht nicht aus den offiziellen Dokumenten verstanden. Gibt es zu diesem Thema irgendwo eine tiefere Diskussion, die Sie zum Lesen empfehlen würden? Ich habe über die Unterscheidung in Bezug auf Sätze gegen Individuen nachgedacht. Also gehen Methoden, die sich mit Gruppen von Entitäten befassen, in die Klasse Table und Methoden, die sich nur mit einzelnen Entitäten befassen, in der Entity-Klasse. Aber ich sehe, dass dies nicht wirklich viel anderes als irgendeine triviale Code-Organisation erreicht. – Ethan
Aufrufe an Entity-Setter ** delegiere nicht an das Tabellenobjekt, noch an Getter. Entitäten sind einfache dumme Datenobjekte. Sie stellen eine einzelne Zeile in RDBMS oder ein Dokument in einem dokumentbasierten Speicher dar. Der Punkt ist nicht nur Code-Organisation, sondern * Trennung *. Das Ziel ist Modularität und dadurch einfache Wartung und Wiederverwendbarkeit. Du kannst aus 10 Steinen etwas Neues bauen, wenn du sie aneinander klebst oder festnagelst, kannst du es nicht, sie sind gekoppelt und stecken fest und sind später schwer auseinander zu brechen. Gleiches gilt für Software. Schlug lesen: https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882 – burzum
ich die Trennung von Bedenken Prinzip in der Zusammenfassung zu verstehen, und ich kann sehen, wie es in vielen anderen Situationen gilt, aber ich hatte Schwierigkeiten, es mit Entitäten gegen Tabellen anzuwenden.Ich denke, ich verstehe es jetzt. Entitäten sind ein Ersatz für die geraden "dumber" -Arrays, die v2 benutzt hat, daher war die Rolle, von der sie kommen, sehr begrenzt. Eine Entität muss nicht von einem Tisch kommen, und nichts erfordert, dass sie jemals für einen beibehalten wird. Es darf niemals eine 'id' haben, niemals Standardwerte, die während 'beforeSave()' usw. von der Table-Klasse angewendet werden. – Ethan