2013-06-07 57 views
7

Uważają, że chcę być w stanie zaoszczędzić użytkownikowi bazy danych, moja akcja dodatek jest następująca:Zend Framewok 2, Doctrine 2 i gdzie zrobić logiki biznesowej dopasowanie w

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

Bardzo łatwo zaoszczędzić użytkownika do bazy danych, jednak jeśli potrzebuję dodać złożoną logikę biznesową, chcę sprawdzić, czy wiadomość e-mail jest unikatowa i że chcę również uzyskać dostęp do niektórych usług sieciowych w celu sprawdzenia, czy jest to odpowiedź na ostateczne pytanie o życie, wszechświat i wszystko jest naprawdę 42, a jeśli jest prawdą, chcę zapisać użytkownika do bazy danych, jeśli nie chcę wyświetlać użytkownikowi wiadomości.

Można to zrobić dodając akcję, ale jak mi powiedziano, nie jest to bardzo dobra praktyka, mogę umieścić tę logikę biznesową wewnątrz podmiotu Użytkownika, ale to spowodowałoby dodanie sprzężenia między zf2 a doktryną z bytem, ​​a to jest również złe. Poszukując rozwiązania w sieci odpowiedź wydaje się być logiką biznesową w warstwie serwisowej.

Po odejściu od rozwiązania warstwy usług można utworzyć klasę UserBusinessLogic i utworzyć zapis metody, który wykona logikę biznesową i zapisze użytkownika, jeśli wszystko jest w porządku.

Czy to brzmi dobrze? Czy istnieje dokumentacja na ten temat? Być może przykład kodu pokazujący, jak radzić sobie z logiką biznesową za pomocą doktryny 2 i zf2 oraz usług.

Podejrzewam, że podstawą jest: Jaka jest najlepsza praktyka, aby umieścić logikę biznesową podczas używania zf2 i doktryny 2?

Zakładając, że rozwiązanie serwisowe jest najlepszym rozwiązaniem. Gdybym posiadał Entitys Users, Groups i relacje między tymi dwoma, utworzyłbym usługę o nazwie "access", a ta usługa byłaby tą, która otrzymuje dane od kontrolerów, aby uratować użytkowników, połączyć te 2, a także wykonać inne zadania, takie jak wysyłanie wiadomości e-mail w celu zresetowania hasła użytkownika. Czy to brzmi dobrze?

Odpowiedz

1

Masz dobry pomysł. Aby oddzielić Doctrine 2, możesz utworzyć kolejną warstwę, która następuje po jednym z interfejsów w Zend \ Db, ale używa Doctrine do wykonania interakcji z bazą danych.

Ponadto do weryfikacji można utworzyć niestandardowe filtry wejściowe dla formularza sprawdzającego w bazie danych za pomocą Doctrine.

Chodzi o to, że wszystko, co znajduje się za usługą, można zastąpić zmieniając usługę, o ile nazwy metod pozostają takie same. W ten sposób możesz później zastąpić na przykład Doctrine za pomocą Propela i nie będziesz musiał modyfikować widoków kontrolerów, tylko klasa serwisowa.

+1

wygląda ładnie, ale o wiele więcej pracy, aby mieć coś do pokazania. Byłoby miło, gdyby szkielet zf2 mógł być przykładem takiej sytuacji – uacaman