2

ここで MVC 構造に関する初心者の質問。したがって、MVC では現在、ビューにデータベース クエリの結果のリストを表示するページがあります。このコードでは、クラスをインスタンス化し、SQL クエリのメソッドを実行し、最後に for each ループと次に、divで表示します。

だから私の質問は、このコードのビットがビジネス ロジックと見なされ、モデルのメソッドに含まれている必要があるか、それともビューの一部であるかということです。

私の言いたいことを理解していただければ幸いです =) ありがとうございます!

$listholder = new Categories_Model(); 
$data = $listholder->getCategories();

       $i = 1;
        foreach ($data as $row) {

            if ($i & 1) {
                echo '<div id="horizontalContainer" style="float: none; height: 50px";>';
                echo '<div id="listoverview1"><a href="'.URL.'categories/show/'.$row['id'].'">'.$row['catname'].'</a>';
                echo '</div>';
            } else {
                echo '<div id="listoverview1"><a href="'.URL.'categories/show/'.$row['id'].'">'.$row['catname'].'</a>';
                echo '</div></div>';
            }

            $i++;
       }
4

4 に答える 4

1

いいえ、そのコードは主にビューコードです。唯一の目的は、外部プロセス(人間)が好きな形でデータを見ることができるようにすることです。最初の行のチェックは、ビジネスロジックではなく、外部プロセスにとってのみ重要であると想定します。

モデルコードはデータを形成、取得、設定します。データの一部は永続化され(データベースなど)、一部はオンデマンドで計算されます

モデルまたはビューが実行する必要があることに関する、いくつかの一般化された簡略化された例:

  • モデルはいくつかの財務数値の合計を計算します
  • ビューは、偶数行ごとにフラグを立てて、ビューの影付きの背景でレンダリングできるようにします

また、従来のMVCシステムでは、コードの最初の2行はコントローラーにあり、コントローラーはモデルとモデルメソッドを使用してデータを取得することでデータセットを整理します。MVCシステムは、そのデータを選択したビューに渡してレンダリングします

CAKE、KISSなどのPHPベースのMVCフレームワークはたくさんあります(すべてが非常に優れているわけではありません!)。ポケットに数ドルある場合は、時間とストレスを節約し、MicrosoftMVCをロードしてください

于 2012-08-06T01:47:29.337 に答える
0

MVCデザインパターンの目標は、プレゼンテーションをドメインビジネスロジックから分離することです。そのため、ビジネスロジックはモデルレイヤーにのみ存在します(モデルは単一のクラスではなくレイヤーです。という名前のクラスがある場合は、Model間違っています)。プレゼンテーションレイヤー全体にコントローラーのビューが含まれます。

コントローラインスタンスは、ユーザーのリクエストを処理し、モデルの状態をビューインスタンスに変更するインスタンスです。

ビューインスタンスは、プレゼンテーションロジックを含むインスタンスです(ドメインオブジェクトがモデルレイヤーにビジネスロジックを含むのと同じです)。ビューはモデルレイヤーから情報を取得し、使用するテンプレートを決定します。さらに、テンプレートが必要かどうかも決定します。ビューはWebサイトで応答を生成し、リダイレクトヘッダーの送信も応答の形式であり、テンプレートはまったく必要ありません。

また、PHPで従来のMVCパターンを使用することは不可能であることを理解する必要があります(そして、そのようなオプションを提供するいくつかのWeb開発では非常に複雑で実用的ではありません)。代わりに、MVCに触発されたパターンの1つを使用します。

これらのパターンは、*ビューがモデルレイヤーから情報を取得する方法によってほとんど区別できます。主なオプションは、Model2 MVC、MVP、MVVM、およびHMVCです。


この場合、ビューはモデルレイヤーからカテゴリのセットを取得する必要があります。次に、リストが空でなく、例外がスローされない場合は、並べ替えられていないHTMLリストを生成するテンプレートを選択します。

ビジネスロジックは、モデルレイヤー(カテゴリを処理するドメインオブジェクト内)、ビュー内のプレゼンテーションロジック、およびすべてをHTMLで変換するプロセス(選択したビューのテンプレート内)に残ります。

于 2012-08-06T01:32:10.573 に答える
0

Rails または CakePHP を例にとると、コードは mvc パターンに従っていません。

  • モデルにはビジネスロジックのみを含める必要があります(オブジェクトのフィールドでクエリ/何かを行う)
  • コントローラーは、パラメーターを使用して Web ページの要求を受信することで「のみ」動作し、正しいページを送り返す必要があります。
  • Viewは基本的にhtmlページのみ

明らかに、これは html とは何かについての非常に短い説明です。

あなたの場合、アイデアは次のようになります。

$listholder = new Categories_Model(); 
$data = $listholder->getCategories();

これはコントローラー コード (通常) でgetCategoriesあり、Model メソッド (そのままで構いません) です。次に、コントローラーはビューにいくつかのパラメーターを送信します。ビューは、それらをユーザーに表示する方法を知っています。この場合は$data変数です。次のようなものを想像してくださいprintMyView($view_file_path, $data)

ビューは次のようになります。

別の制御構造構文については、 http://php.net/manual/en/control-structures.alternative-syntax.phpを参照してください (非常に便利です)。おそらく、URL は sprintf などでより適切に記述されます (私のやり方ではありません)。

基本的に、(物事を論理的に分割するために) 3 つのファイルが必要です。法則は非常に簡単です。コントローラーにもモデルにも html を記述しないでください。

于 2012-08-06T00:44:00.100 に答える
0

あなたの質問から、他の開発者が MVC とは何かを考えていることとは何の関係もない MVC についてある程度理解しているかもしれません。特に最近では、一部のフレームワークがこれらの 3 文字を実際に提供せずにキャッチフレーズとして使用しているため、これが発生する可能性があります。

質問で概説したコードから、それは典型的なトランザクションスクリプトであり、特定の種類のモデルやビューレイヤーは含まれていないと思います。

トランザクション スクリプトはビジネス ロジックを転送します。ビューやモデルについて多くを推測する必要はありません。すべてをトランザクション スクリプト内に保持するだけです。

トランザクション スクリプトはスパゲッティ コードになる傾向がありますが、あちこちで少しリファクタリングを行うことで、時間の経過とともに重複するコードを減らすことができるはずです。また、アプリケーションが実際には実行不可能なほど大きくなることはないと思います。トランザクション スクリプトで維持されます。

では、他の十分に証明されたパターンですべてが順調に進んでいるのに、なぜ MVC について心配する必要があるのでしょうか。

于 2012-08-06T00:22:56.580 に答える