3

これについてはっきりさせておきたい。私はcodeigniterを使用しています。

Webアプリケーションを構築する際のcodeigniterでのOOP設計のより良い/適切な/標準/最も評価されている方法は何/どれですか?

一般的、

I. Userのようなカスタムクラスを作成し、ログイン機能を持っていますか?好き、

     class User{ 
            var $db, $id, $username, $password, $role; //have all user attributes here

            function __construct() {
               //instance for accessing the database
               $this->db =& get_instance();
            }

            public function login(){
                //do the login here
                $this->db->load->model('user_model');   
                $success = $this->db->user_model->login($this->username, $this->password);      
                //isn't this redundant using models? or should I rename the model function name like checkLogin?
                return $success;
            }

            //other class functions 
        }

また

II。ユーザーオブジェクトを作成せずに、コントローラーからモデルのログイン関数を直接呼び出しますか?

O_o

スキーム1では、データベースでのみクエリを実行するモデルを作成しています。また、「Client」、「Admin」のように「User」オブジェクトを継承させ、オブジェクトごとに特定の機能を追加することもできます。CIコントローラーをレイアウトとビューへの変数の受け渡しに集中させるという利点があります。これは主にその目的であり(よくわかりません)、カスタムクラス/オブジェクトがWebアプリの操作に取り組むことができます。 しかし、モデル内の別のログイン関数を呼び出したログイン関数に冗長性を感じます。これはいいですか?

スキーム2では、ログイン、登録、ログの作成などのすべての操作をコントローラーに処理させ、入力投稿を受信して​​変数をビューに渡すのは適切ですか?

本当にガイドが必要です。私のOOスキルは成長する必要があります。

どうもありがとう!

4

3 に答える 3

2

まず、この記事を読むと便利だと思います。

アクセス制御リスト

私は現在CodeIgniterを使用するプロジェクトに取り組んでおり、ここで使用しているアプローチもおそらくあなたに合っているでしょう。承認を確認する必要がある場合、これを行うのに最適な場所は、ユーザーがまだ登録されていない場合にログイン関数を呼び出すクラスのコンストラクターにあると思います。ただし、これは少し一般的なアプローチであるため、一部の関数を登録ユーザーのみが使用できるクラスがある場合は、関数内でチェックを行う必要があります。

于 2012-06-14T06:42:26.700 に答える
1

厳密なOOモデルを本当に実行したい場合は、DataMapperの使用を検討する必要があります。多くの人がそれがアプリケーションを遅くすると言うでしょう、本当です、しかしこれはあなたが完全なOOのために支払う価格です。できることは、すべてのデータ操作を処理するUserクラスを作成し、ログインをAuthライブラリに移動することです。これは、Userモデルで機能します。また、モデルはデータ操作を操作/実行することを忘れないでください。コントローラーはビジネスロジックを格納します。私も学習しており、この投稿がお役に立てば幸いです。

于 2012-06-14T08:38:28.050 に答える
0

このモデルを何度も使用する場合は、オブジェクトを作成し、モジュールをコンストラクターにロードすることを常にお勧めします。

$this->db =& get_instance();ただし、コンストラクターでの使用はお勧めしません 。これはすでに自動ロードされているはずです。

于 2012-06-14T06:35:54.647 に答える