1

私を悩ませてきた建築上の問題があります。

Codeigniter はモデルをそのように定義します。現在、モデルが別のモデルと密接に結びついている場合があります。つまり、ユーザーとセキュリティです。

モデル内の別のモデルにアクセスするのは悪い習慣ですか?

すなわち

class User extends CI_model 
{
    function getUser() 
    {
        $this->load->model('User');
        $user = // load user 

        $this->load->model('Security');
        $security = // load security

        $user->security = $security;
    }
}

私には「コーシャ」とは感じられません。基本的な CRUD とモデル固有の操作をモデルに残しながら、両方のモデルをロードして必要なフェッチを実行できるように、DAO または何らかの DAL を上に置く必要があるように感じます。また、別のレイヤーを作成する場合、それらを Codeigniter フレームワークに配置する論理的な場所のようには見えません。

4

2 に答える 2

4

残念なことに、CodeIgniter は MVC デザイン パターンを実装していません。Rails アーキテクチャを模倣しているだけです。違いがあります。

CodeIgniter で「モデル」と呼ぶものは、通常、アクティブ レコード(アンチ) パターンの実装です。ドメイン ビジネス ロジックの責任とストレージ ロジックを組み合わせます。

そのため、標準の CI コードを使用している場合は、それを行うべきではありません。そのような機能がないため、$this->load->model() 別のインスタンス内で呼び出すことはできません。CI_ModelCI_Controller

__construct()代わりに、 CI のグローバル インスタンスにアクセスして$this->load変数にバインドするdefault をオーバーライドする必要があります。基本的にはハックになります。

コントローラーで「モデル」をインスタンス化し、それらの依存関係を手動で注入する方がよいでしょう。


繰り返しになりますが、CodeIgniter を使用しているので、開発の原則を気にする人はいません。

于 2012-09-19T19:10:12.270 に答える
0

DataMapper ORM をチェックしてください

CodeIgniter の DataMapper ORM

サイトから:

DataMapper は、PHP で CodeIgniter 用に記述されたオブジェクト リレーショナル マッパーです。データベーステーブルをオブジェクトで簡単に操作できるようにマップし、相互の関係を完全に認識できるように設計されています。

于 2012-09-19T18:39:21.060 に答える