私は自分のMVCフレームワークをPHPで学習しています。正しいコントローラ/アクションなどを呼び出すためのルータ/ディスパッチャクラスを持つことは本当に難しいことではありませんでした。PHP MVCのBaseModel、良いか悪い?
しかし、今私はモデルを使用する部分にいます。実際には、モデルレイヤーです。しかし、私を混乱させる何かがあります。
他の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が悪いことではないと私は確信しています。ほとんどのブロガーは単なる羊の束です:-)
pretty [Propel](http://www.propelorm.org/)-ish – Alp
これらのブログ記事のいずれかへのリンクを教えてもらえますか? – webbiedave
@Alpのコード例? Propelは単なるORMであり、私は自分でクエリを書くのが好きなので、その方向には進まない。私はORMs reaallhateいけない。しかし、私はむしろそれらを使用していません。いくつかの '魔法'は大丈夫ですが、それほど多くはありません。しかしそれはまったく別の話だ。 – Vivendi