2

モデルが取得するフィールドを設定するためのベストプラクティスがあるかどうか疑問に思いました。この2つの異なるアプローチ(擬似コード)の間:

  1. コントローラで値を定義し、モデルに送信します。

    Controller::get()
    {
        $fields = ['id_user', 'name', 'etc'];
        Model::get_by_email($email, $fields);
    }
    
    Model::get_by_email($email, array $fields)
    {
        return fetch('SELECT $fields FROM user');
    }
    
  2. modelメソッドは、取得するフィールドを定義します。

    Controller::get()
    {
        Model::get_by_email($email);
    }
    
    Model::get_by_email($email)
    {
        $fields = [self::ID_USER, self::NAME, self::ETC);
        return fetch('SELECT $fields FROM user');
    }
    

アプローチごとに異なる長所と短所があります。どう思いますか?

4

2 に答える 2

0

私が見たほとんどのアプリケーションでは、どのアプローチも使用されていませんでした。次のようなものでした。

Controller::get()
{
    Model::get_by_email($email);
}

Model::get_by_email($email)
{
    return fetch('SELECT user, name, etc FROM user where email=$email');
}

そのため、選択したフィールドはクエリでハードコードされています。テーブル内のすべての列を取得するか (ある種の「一般的な」要求)、または各サービスに必要なものだけを取得する特定の要求があります。

使用しているスタックによっては、コントローラーとモデルの間に「サービス」レイヤーもあります (Java アプリなど)。IMO コントローラーは、必要なものを要求するべきではありません。サービス/モデルが必要なものを提供すると想定しているだけです。これは、下層のレイヤーの何らかの形式の「クライアント」であるため、要件を要求するのではなく、提供されているものを使用する必要があります。

あなたの2番目のアプローチは私が説明したものと非常に似てい$fieldsますが、あなたが説明したように、その内容は静的であるため、配列は不要に思えます。

于 2013-01-24T21:47:18.017 に答える
0

どちらの場合も、ドメイン ロジックまたはストレージ ロジックのいずれかをプレゼンテーション層に公開しているため、どちらのアプローチも間違っています。

また、コントローラーがデータを取得する必要がある MVC の記述をどこで読んだのですか? コントローラーの唯一の責任は、ユーザー入力がモデル層 (そして、ほとんどの場合、現在のビュー) に渡される方法を決定することです。

于 2013-01-25T06:19:49.633 に答える