私はいくつかのエンティティを持っていて、保存したり、有効にしたり、削除したりする必要があります。なぜテーブルメソッドを呼び出さなければならないのですか?例えば:私はのようにそれを行うことができ、私の記事のエンティティのCakephp 3:エンティティからテーブル関数を呼び出すのは悪いのか良い考えですか?
:
$article->save();
または$article->delete();
それは実現するのは非常に簡単です:
$articlesTable = TableRegistry::get('Articles');
$article = $articlesTable->get(12);
$article->title = 'CakePHP is THE best PHP framework!';
$articlesTable->save($article);
は、なぜこのようにされていません。
namespace App\Model\Entity;
use Cake\ORM\Entity;
class Article extends Entity
{
public function save()
{
$table = TableRegistry::get($this->source());
$table->save($this);
}
}
それは働いていますが、私はそれが悪い練習かよいアイデアかどうかを知りたいと思います。事前に
感謝:)
私はこのアプローチについてもっと知りたいと思います。以前はCakePHPのテーブルとエンティティのクラスについては考えていませんでしたが、私は公式のドキュメントからこの意図を把握していませんでした。あなたが読んでお勧めするこのトピックに関する深い議論はありますか? 私は、セットと個人の区別の点で考えてきました。したがって、エンティティのセットを扱うメソッドは、Tableクラスになり、単一のエンティティのみを扱うメソッドはEntityクラスになります。しかし、私は、これがいくつかの些細なコード構成以外の多くを実際に達成するわけではないことを知っています。 – Ethan
エンティティセッターへの呼び出し**はテーブルオブジェクトに委譲していません。また、ゲッターも行いません。エンティティは単純なダムデータオブジェクトです。それらは、RDBMS内の単一の行または文書ベースのストレージ内の文書を表します。ポイントはコード編成だけでなく、*分離*です。目標はモジュール性であり、このメンテナンスと再利用が容易です。 10本のレンガから新しいものを作ることができます。接着したり、釘付けしたりすることができない場合、後で壊れにくくなります。同じことがソフトウェアに適用されます。推奨読書:https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882 – burzum
私は抽象的に懸念の原理の分離を理解しており、それが他の多くの状況にどのように適用されるかを見ることができます。エンティティとテーブルを適用するのは苦労していました。私は今それを得ていると思う。エンティティは、v2が使用していた偶数の「ダム」配列の代わりに使用されるため、それらの役割は非常に限られていました。エンティティはテーブルから来る必要はなく、何もそれが永遠に永続化される必要はありません。これは 'id'を持つことはできませんし、' beforeSave() 'などの間にTableクラスによって適用されるデフォルト値を受け取ることはありません。 – Ethan