0

因此,在修补我自己构建的 MVC 框架时,我注意到一些看起来需要重构的东西。

如果我在视图中有一个调用驻留在模型中的函数的函数调用,并且该函数采用会话/发布/获取变量作为参数。最好在函数调用中将这些变量作为参数传递,还是只在模型中的函数中访问它们?

视图中的代码:

$model = $this->model; // Shortcut to the model
$vaildator = $this->model->validator; // Shortcut to the Validator object in the model
$btnPressed = $this->model->btnPressed; // Shortcut to the btnPressed flag var in the model

<label for="firstName">First Name: <span class="<?php echo $model->setReq($_POST['firstName'], 'First name'); // Set the class of the span tag the holds the 'required' text ?>">(required)</span></label>
<input type="text" name="firstName" id="firstName" title="First name" value="<?php echo htmlspecialchars($btnPressed ? $_POST['firstName'] : 'First name'); // Echo the user's entry or the default text ?>" maxlength="50" />
<?php if($btnPressed) $vaildator->valName($_POST['firstName'], true, true, 'First name'); // Check for errors and display msg if error is found ?>

模型中的代码:

// If the field is empty or still contains the default text, highlight the 'required' error msg on the input field by changing the msg's class
// Note: used only for input fields that are required
public function setReq($postVar, $defaultText)
{
    $className = 'required';

    if($this->btnPressed)
    {
        $className = $postVar == '' || $postVar == $defaultText ? 'reqError' : 'required';
        return htmlspecialchars($className);
    }
    else
    {
        return htmlspecialchars($className); 
    }
}

我问的原因是因为将参数放在视图中的函数调用中会使视图看起来逻辑很重,但反过来做,访问模型中的 session/get/post 变量,似乎有点 hacky 并且会使代码不非常可重复使用。感谢您的任何建议!

4

1 回答 1

2

解决办法是:解耦

基本上,在函数调用中传递POST 变量。

为什么?因为逻辑将保持分离(控制器将使用它需要的请求的任何部分,然后调用模型),而且它会更容易测试(你将能够只传递假参数而不是假装$_POST$_GET变量或做其他一些花哨的东西)。它也将更容易调试。

换句话说,解耦会减轻你的工作。

于 2012-10-09T01:38:37.763 回答