0

そのため、自作の MVC フレームワークをいじっていると、リファクタリングが必要と思われるものに気付きました。

モデル内に存在する関数を呼び出すビューに関数呼び出しがあり、その関数がパラメーターにセッション/ポスト/取得変数を受け取る場合。これらの vars を関数呼び出しで引数として渡すか、モデル内の関数でそれらにアクセスするのが最善ですか?

ビュー内のコード:

$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); 
    }
}

私が尋ねる理由は、ビューの関数呼び出しに引数を入れるとビューが論理的に重いように見えますが、逆の方法でモデルのセッション/取得/ポスト変数にアクセスすると、少しハッキーに見え、コードが非常に再利用可能です。アドバイスをありがとう!

4

1 に答える 1

2

解決策は、デカップリングです。

基本的に、関数呼び出しで POST 変数を渡します。

なんで?ロジックが分離されたままになるため (コントローラーは要求の必要な部分を使用してからモデルを呼び出します)、さらにテストがはるかに簡単になります (偽の変数や変数$_POSTを渡す代わりに、偽の引数を渡すだけで済みます)。$_GET他のいくつかのファンシーなもの)。また、デバッグも容易になります。

つまり、デカップリングによって作業が楽になります。

于 2012-10-09T01:38:37.763 に答える