Cakephp不确定这个业务逻辑是否属于View?

时间:2013-03-27 17:39:34

标签: php templates cakephp

我开始尝试使用CakePHP,我正在考虑计算,可能是商业,逻辑,以确定在View上显示的内容应该在视图中还是在其他地方。

我最终将它们放在视图中的问题是因为数据仅在我执行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; ?>

你们都说什么?

1 个答案:

答案 0 :(得分: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;
}

第三,我想说在这种特殊情况下最好的方法是使用虚拟字段(http://book.cakephp.org/2.0/en/models/virtual-fields.html),因此计算将作为数据库查询的一部分进行。

最后,显然并不总是在所谓的呈现逻辑和被视为业务逻辑之间完全明确。在像你这样的简单案例中,它可以采取任何一种方式,并且不值得失眠。

严格地说,计算两个值之间的差异是对数据的操纵,因此属于模型。

话虽如此,如果您认为您的代码更透明,更容易理解和维护,在您的视图而不是模型中使用该代码,只需将其放在视图中即可!

关于代码理论和最佳实践的事情是,它们旨在作为使代码更易于调试/读取/扩展/维护的一般指南。通常,它们非常好,但它们不是绝对的规则。如果违反规则或最佳实践将真正使您的代码更容易调试/读取/维护,那么很好!违反了!