CodeIgniterを使用して Web アプリケーションを設計しています(ただし、この質問は Web アプリケーションのMVCパターンに一般的に当てはまると思います)。
データベース エンティティのモデル クラスを設計する場合 (たとえば、BlogEntry
説明用に)、基本的に 2 つの選択肢があります。
「古典的な OOP」アプローチは、クラスがエンティティを表現できるようにすることです。つまり、クラスの 1 つのインスタンスがBlogEntryになります。CodeIgniter では、これは次のようなコードになります。
class Blogentry extends CI_Model {
function load($id) {
// Access database
$this->id = $dbresult.id;
$this->title = $dbresult.title;
$this->author = $dbresult.author;
}
}
いくつかのブログ エントリにアクセスするには$this->load->model('blogentry');
、 を呼び出し$this->blogentry->load($id)
てから、モデル クラス インスタンスを操作します。
私がよく目にするもう 1 つのアプローチは、モデルが何らかのデータ構造でエンティティを返すようにすることです。コード内:
class Blogentry extends CI_Model {
function get_entry($id) {
// Access database, yielding $dbresult
return $dbresult;
}
これで私は書くだろう
$this->load->model('blogentry');
$the_entry = $this->blogentry->get_entry($id);
コントローラーで を操作し$the_entry
ます。この 2 番目のケースでは、クラスはファクトリクラスまたはビルダークラスに似ています。
これらの 2 つのアプローチのいずれかが、MVC で M を実行する「正しい方法」と見なされますか? 2 番目のアプローチの方が頻繁に見られると思いますが、それほど多くの MVC-Webapps は見ていません。最初または2番目のアプローチがより適切である理由について何か考えはありますか?