2013-06-07 11 views
7

におけるビジネスロジックのフィット感は、私はデータベースにユーザを保存できるようにすることを考えてみましょうか、私の追加アクションは以下の通りです:ZendのFramewok 2、教義2、どこ

public function addAction() 
    { 

    $form = new UserForm(); 
    $form->get('submit')->setValue('Add'); 

    $request = $this->getRequest(); 

    if ($request->isPost()) { 

     $userFilter = new UserFilter(); 
     $form->setInputFilter($userFilter->getInputFilter()); 
     $form->setData($request->getPost()); 

     if ($form->isValid()) 

      $user = new User(); 
      $user->setEmail($form->getInputFilter()->getValue('email') ); 
      $user->setNome($form->getInputFilter()->getValue('name')); 


      $em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager'); 
      $em->persist($user); 
      $em->flush(); 


      return $this->redirect()->toRoute('user'); 

     } 
    } 

    return array('form' => $form); 
    } 

保存することが非常に簡単ユーザーをデータベースに追加する必要がありますが、複雑なビジネスロジックを追加する必要がある場合は、電子メールがユニークであることを確認したいと思います。また、Webサービスにアクセスして、生活、宇宙、すべてが本当に42です。本当であれば、ユーザーにメッセージを表示したくない場合は、データベースにユーザーを保存します。

アクションを追加することはできますが、これは非常に良い方法ではないと言われています。このビジネスロジックをエンティティユーザーに入れることができますが、これはエンティティとzf2との間の結合を追加します。悪いWebでソリューションを検索すると、サービスロジックにビジネスロジックが置かれているようです。

Service Layerソリューションを嫌うと、クラスUserBusinessLogicを作成し、ビジネスロジックを実行し、すべてが正常であればユーザーを保存するメソッドsaveを作成します。

これは正しいですか?このテーマに関する文書はありますか?おそらく、doctrine 2とzf2とサービスを使用してビジネスロジックを処理する方法を示すコード例です。

私は、zf2とdoctrine 2を使用する際のビジネスロジックをどこに置くのがベストプラクティスですか?

サービスソリューションが最適な方法だとします。エンティティのユーザ、グループ、およびそれらの2つの関係がある場合、私は "アクセス"と呼ばれるサービスを作成し、このサービスはコントローラからデータを受信して​​グループを保存し、それらをリンクし、メールを送信してユーザーのパスワードをリセットします。これは正しいと思いますか?

答えて

1

あなたは正しいアイデアがあります。 Doctrine 2を分離するには、Zend \ Dbのインターフェースの1つに続く別のレイヤーを作成することができますが、Doctrineを使用してデータベースのやり取りを行います。

また、検証のために、Doctrineを使用してデータベースに対してチェックするフォームのカスタム入力フィルタを作成できます。

サービスの背後にあるものは、メソッド名が同じであればサービスを変更することで置き換えることができます。この方法で、後でDoctrineをPropelに置き換えることができます。コントローラ&のコントローラをリファクタリングする必要はなく、サービスクラスだけです。

+1

はすばらしいと思われますが、何かを表示するためにはるかに多くの作業が必要です。 zf2スケルトンアプリケーションの場合、この状況のいくつかの例が良いでしょう – uacaman