Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony2][Symfony]Gdzie powinnien być flush ?
Matrix12
post
Post #1





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 22.03.2015

Ostrzeżenie: (0%)
-----


Mam pytanie odnośnie persist i flush. Stworzyłem serwis gdzie wykonuje operacje na książkach, kataloguje je itd. Problem w tym, że nie wiem gdzie wykonać flush ? Czy zrobić to tak że w serwisie dać tylko persist a w kontrolerze flush ? Czy np. dodać fabryke która będzie zapisywała dane do bazy lub w repozytorium dać metodę add i tam zrobić persist i flush ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kpt_lucek
post
Post #2





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(Matrix12 @ 21.09.2015, 13:17:59 ) *
Mam pytanie odnośnie persist i flush. Stworzyłem serwis gdzie wykonuje operacje na książkach, kataloguje je itd. Problem w tym, że nie wiem gdzie wykonać flush ? Czy zrobić to tak że w serwisie dać tylko persist a w kontrolerze flush ? Czy np. dodać fabryke która będzie zapisywała dane do bazy lub w repozytorium dać metodę add i tam zrobić persist i flush ?


Usiądź nad Swoim kodem i zastanów się:
- co robi usługa - fabryka - tworząca i uzupełniająca objekt,
- co robi controller,
- co się dzieje podczas flow

bazując na tych danych ustalisz pewne kryteria obsługi obiektu encji, a co za tym idzie, odpowiedniego miejsca jej zapisu.

Prosty przykład:
Edytujesz obiekt poprzez formularz, validujesz i wszystko ładnie pięknie przechodzi, masz przynajmniej dwie opcje:
a) zapiszesz w controllerze,
(IMG:style_emoticons/default/cool.gif) zapiszesz poprzez dedykowaną usługę (np. manager),

Wiesz jaka jest różnica między pkt. a a pkt. b?

Jest taka, że jeżeli, z jakiegoś powodu, w innej akcji wprowadzisz zmiany na w/w obiekcie, to będziesz duplikował kod save'a, dlatego z pomocą przychodzi Ci rozwiązanie b, validujesz obiekt po stronie akcji (bądź wypychasz do usługi zajmującej się handlowaniem formularzy - polecam) i wywołujesz:

  1. $myBookManager = $this->get('my_book_manager');
  2. $myBookManager->save($myBook);


Kolejną zaletą w/w postępowania jest to, że masz gotową usługę, którą możesz injectować w inne usługi - reużywalność kodu, poza tym, Twoja akcja "save" może wykonywać jakieś inne, automagiczne zmiany związane lub nie z obiektem, wywalać eventy, co się tylko podoba.



Ważną uwagą jest, abyś nie wpadł na "super" pomysł i nie budował listenera (kernel.terminate), tak aby zapisywał encje po obiegu requesta (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 22:10