重构初学者

时间:2016-04-07 13:47:44

标签: php codeigniter refactoring

所以我建立了一个系统,现在我正在整理。我使用Codeigniter MVC框架和PHP Storm,在我看来,我有大量的数学。见吼叫。

 foreach ($records as $row) :

            $join_date = $row->start_date;
            $date1 = new DateTime('now');
            $date2 = new DateTime($join_date);

            $p = $row->start_amount;
            $i = $row->interest;
            $c = 12; // compound frequency set to monthly
            $n = ((int)$date1->diff($date2)->format("%m")) / 12;
            $r = $row->monthly_deposits;
            $x = $i / $c;
            $y = pow((1 + $x), ($n * $c));
            $Total_balance = $p * $y + ($r * (1 + $x) * ($y - 1) / $x);

            $remain = 365 - $date1->diff($date2)->format("%a days");

            $Total_Deposits = ($row->monthly_deposits * (int)$date1->diff($date2)->format("%m")) + $row->start_amount;
            $Total_Int = $Total_balance - $Total_Deposits;

            $originalDate = $row->start_date;
            $newDate = date("jS \of F Y", strtotime($originalDate));

            // Add field values to get row total
            $rowTotal = $Total_balance;

            // Add row total to grand total
            $grandTotal += $rowTotal;
            ?>

我需要它,所以我可以在我的代码中调用变量,它需要在循环中。

这是最好的方法,显示我将数学放在模型中,并在循环中放置this>model>modelname之类的东西?

谢谢大家,代码工作得很好,只是不确定最好的方法来保持整洁。

1 个答案:

答案 0 :(得分:0)

视图基本上是指显示已在控制器中计算的内容。以此为一般规则(这并不意味着如果需要,您无法在模型或视图上计算任何内容)。

为了保持代码清洁和有意义,我会执行以下操作:

<强>模型

class Random_model extends CI_Model {
    function get_records() {
        // access the database and return the rows you need
    }
}

<强>控制器

function whatever() {
    $data = array(
        'first_result' => '',
        'second_result' => ''
    );

    $this->load->model('random_model');
    $records = $this->random_model->get_records();
    foreach ($records as $row) {
        // do here the huge chunk of math and
        // put in $data the results you need to display
    }
    $this->load->view('myview', $data)
}

查看

<div> <?php echo $first_result; ?> </div>
<div> <?php echo $second_result; ?> </div>