学習目的で、PHPで独自のMVCフレームワークを作成しています。適切なコントローラー/アクションなどを呼び出すためのルーター/ディスパッチャークラスを持つことはそれほど難しくありませんでした。
しかし今、私はモデルを使用する部分にいます。または実際には、モデルレイヤー。しかし、私を混乱させる何かがあります。
他の多くのMVCフレームワークには「BaseModel」があります。「モデル」を別のクラスと見なすべきではないため、これは実際には悪い習慣であると読みました。しかし、実際の「レイヤー」としては、「マッパー」パターンや「リポジトリ」パターンなどを含めることができます。
でも正直なところ、そこには何のメリットもありません。私には、「BaseModel」クラスが最速の方法のようで、同じ結果が得られます。
私は単に次のようなことをすることができます:
class User extends BaseModel
{
// the GetUserBy* could easily be something that's handled by the
// BaseModel class, like in the Repo pattern.
public function getUserByName ( $name )
{
// no error handling of any kind, just for simplicity
return $this->db->exec("SELECT * FROM users WHERE name='".$name."'");
}
// $data = array
public function saveUser ( $data )
{
// Make sure no extra fields are added to the array
$user = array ( 'name' => $data['name'],
'address' => $data['address']);
$this->db->autoSave ( $user );
}
}
しかし、リポジトリパターンを使用する場合は、次のものを作成する必要があります。リポジトリエンティティDAO
エンティティには、他のリポジトリへの集約があります。つまり、基本的に、データベーススキーム全体をオブジェクトに手動で書き出しています...
結局、違いは何ですか?BaseModelクラスを使用するだけで、おそらく多くの時間を節約できたはずですが...
しかし、なぜそれがまだ悪いことだと考えられているのですか?リポジトリパターンが私のアプリケーションを切り離しているわけではありません。私にとって、上記のパターンは非常に過大評価されているようです。おそらく、共有状態のアプリケーションでのみ機能します。オブジェクトをローカルに(リポジトリに)保存し、後でコミットします。
そういうわけで私は誰もこれに本当に答えることができないと思います...
しかし、私はまだ私を行かせるまともな答えを見たいと思っています:「ああ...私は何を考えていたのか....」。しかし、そうでない場合は、BaseModelはまったく悪いことではなく、ほとんどのブロガーは羊の群れにすぎないと確信しています:-)