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,

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:
$myBookManager = $this->get('my_book_manager');
$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 