0

ORM (Doctrine 2) で MVC フレームワーク (Zend Framework) を使用しています。一見すると、答えはモデルのようです。しかし、少し考えた後、コントローラーに入れるべきかどうか疑問に思います。私は次のような関数を参照しています

static function addProduct($name, $desc, $quantity, $price) {
    $product = new Product();
    $product->name = $name;
    $product->desc = $desc;
    $product->quantity = $quantity;
    $product->price = $price;
    $em->persist($product);
    $em->flush();
}

そのような機能は問題ないようです。しかし、AJAX を介してインライン編集を許可する場合。例えば。製品名を編集するだけで、コントローラーで次のようなものを使用すると思います

$product->setName($name);
$em->flush();

しかし、$emとにかくコントローラーにエンティティマネージャーが必要なので、コントローラーのデータベースコードのようになりますか? それは私が間違っているということですか?または多分私はちょうどのようなことをすることができます

$product = new Product();
$product->setName($name);
$product->setDesc($desc);
$product->setQuantity($quantity);
$product->setPrice($price);
$em->persist($product);
$em->flush();

私のコントローラーで?

4

2 に答える 2

2

いいえ、そうは思いません。単純に、重いコントローラーと軽いモデルで作業しているのですが、これによりコードが再利用できなくなり、同じコントローラーで同じコードを何度も書くことになります。

だから私は重いモデルと軽いコントローラーが好きです

于 2010-12-24T12:31:29.733 に答える
0

サービスレイヤーがありません。コントローラは、オブジェクト(モデル)と実行中の変数を制御するための単なるエージェントです。私の意見では、モデルクラスは自己表現モデルである必要があり、エンティティマネージャーを認識していません。

間にサービスレイヤーを作成する必要があると思います。モデルを保存/変更するとき、コントローラーはサービスオブジェクトを呼び出してそのようにします。「オブジェクト$idをデータ$dataで変更する」と言っているだけで、サービスレイヤーがこのアクションを実行します。結果(成功/失敗)は、この結果に基づいて動作するようにコントローラーに返されます。

于 2010-12-24T15:01:24.133 に答える