1

私は CakePHP の実験を始めており、ビューに表示されるものを決定する計算、おそらくビジネス、ロジックがビューにあるべきか、それとも別の場所にあるべきかを考えています。

ビューにそれらを配置することになる問題は、 foreach ループを実行するときにのみデータを使用できるためです。簡単な例を次に示します。

    <?php foreach ($records as $record):
        $amountDifference = $record['Record']['outstanding'] - $record['Record']['paid']; 

        if ($amountDifference > 5){
            echo "greater than 5";
         }else{
            echo "less than 5";
         }

    endforeach; ?>

皆さんは何て言いますか?

4

1 に答える 1

1

指摘すべきいくつかのこと...

まず、この場合、コードはそのままで問題ありません。シンプルなものなので、モデルにあるのかビューにあるのかはあまり関係ないと思います。

ビューにそれらを配置することになる問題は、 foreach ループを実行するときにのみデータを使用できるためです。

次に、さらに重要なこととして、"foreach" ループは障壁ではなく、必要に応じてモデルで簡単に実行できることを知っておくことが重要です。モデルに次のようなメソッドを作成するだけです。

public function findAllWithAmountDifference(){
    $records = $this->find('all');

    // Now go through your records and adjust, before returning them
    foreach ($records as &$record):
        $record['Record']['difference'] = $record['Record']['outstanding'] - $record['Record']['paid'];
    endforeach;

    // Now your return value will have extra array keys with the difference
    return $records;
}

そして 3 番目に、この特定のケースでそれを行う最善の方法は、仮想フィールド ( http://book.cakephp.org/2.0/en/models/virtual-fields.html ) を使用することだと思います。データベースクエリの一部として行われます。

最後に、プレゼンテーション ロジックと見なされるものとビジネス ロジックと見なされるものとの間に完全に明確な境界があるとは限らないことは明らかです。あなたのような単純なケースでは、どちらの方向にも進む可能性があり、寝坊する価値はありません。

厳密に言えば、2 つの値の差を計算することはデータの操作であるため、モデルに属します。

そうは言っても、モデルではなくビューにそのコードを表示することで、コードがより透過的になり、理解しやすく、維持しやすくなると思われる場合は、それをビューに配置するだけです!

コード理論とベスト プラクティスは、コードのデバッグ、読み取り、拡張、保守を容易にするための一般的なガイドとして意図されています。通常、それらはかなり優れていますが、絶対的なルールではありません。また、ルールやベスト プラクティスに違反することで、コードのデバッグ、読み取り、保守が本当に容易になる場合は、問題ありません。犯せ!

于 2013-03-27T22:23:15.627 に答える