0

私はMVCパターンについて読んでいますが、phpロジック全体がモデル内にある必要がありますが、次のような状況の場合:モデルからビューに渡されたmysqli_resultオブジェクトからビューに、ある列(mysqlテーブル列)から値をチェックし、に従って何かを出力する必要がありますこの値は、次のように表示されます。

while ($row = $my_mysqli_result_object->fetch_assoc()) {
    if ($row['some_column'] == "1") {
        // print something
    }
    else if ($row['some_column'] == "2") {
        // print something other
    }
    else if ($row['some_column'] == "3") {
        // print something other
    }
    // ....
    // ....
}

ご覧のとおり、ビューにはphpロジックがあります(ロジックはほとんどありませんが、存在します)。

私の質問は次のとおりです。通常、MVCコンセプトの場合、このPHPロジックの量は表示されますか?または、これはMVCにとって正しい方法ではなく、そのような状況では他のことをしなければなりませんか?

4

3 に答える 3

5

MVC に関する一般的な情報

MVC 設計パターンの各部分には、特定の役割があります。これは、2 種類の分離 (懸念の分離の原則によって導入された概念) を導入することによって行われます。

  • システム内のモデル レイヤー [1]プレゼンテーション レイヤーは、ドメイン ビジネス ルールを視覚的表現から分離します。
  • プレゼンテーション レイヤー内のコントローラービューにより、UI 生成とユーザー入力が互いに関連付けられていないことが保証されます。

実際、適切に設計されたモデル レイヤーを見ると、アプリケーション ロジック、ドメイン ロジック、またはストレージ ロジックなど、さまざまなタスクのさまざまな構造が融合しています。

ビューとは何ですか?

Rails [2]のファンやフレームワークがそれをエミュレートしようとしているために、よくある誤解があります。ビューはダム テンプレートではありません

Web に適用される場合、MVC の最新の解釈では、ビューはインスタンスであり、ほとんどの UI ロジックが含まれます。はい、論理です。ビューはモデル レイヤーから情報を取得し、取得したデータに基づいて、生成する応答と、その応答を組み立てるために必要なテンプレートを決定する必要があります。

データのhow取得は、Model2 MVC、MVVM、MVP などの MVC にインスパイアされたパターンを分離した主な要因の 1 つです。

..実際に元の質問について:

コード。ストレージからの情報の取得と出力に関する決定という2つの異なる目標があるため、あなたが示したものは分割する必要があります。fetch_assoc()ビットはモデルレイヤーに移動する必要があります(ほとんどの場合、データマッパーインスタンス内にありますステートメントswitch( $someColumn )はビューインスタンスに移動する必要があります。

status少し関係のないメモとして、この例では、実際にそこにある列を扱っていると思いました。その場合、 with を削除して、 where ... または何かを線に沿ってif/else使用することをお勧めします$status = $listOfOption[ $someColumn ]$listOfOptions = [0 => 'error', 1 => 'pending', 2 => 'unconfirmed', 3 => 'complete'];

ビューは、その列を表現する方法と、テンプレートにバインドする必要がある値を決定するものでなければなりません。

于 2012-12-15T09:48:56.653 に答える
0

MVC パターンでは、すべてのロジックはモデルではなくコントローラーにあります。

モデルは通常、データのみを運びます。データの正確性を検証できます (モデルに委任された唯一の精緻化です)。

ビューはほとんど精緻化できません。つまり、内部に少しのロジックを含めることができますが、プレゼンテーションの側面に関連している場合に限ります。

あなたの質問への回答: この量の php ロジックは完全に正常であり、受け入れられます。

于 2012-12-12T22:18:02.267 に答える
0

その関数を PHP モデル クラスに組み込み、ビュー内で 1 行のコードで呼び出すことができます。

MyModelClass.php

class MyModelClass {

    public static function getData($someColumn)
        //Do Query and get result
        $data_array = null;
        while ($row = $my_mysqli_result_object->fetch_assoc()) {
            if ($someColumn == "1") {
                    // print something
            }
            else if ($someColumn == "2") {
                // print something other
            }
            else if ($someColumn == "3") {
                // print something other
            }
            // ....
            // .... BUILD DATASET ARRAY
            // ....
         }
         return $data_array;
     }
}
于 2012-12-12T22:20:18.387 に答える