Po ponad roku intensywnego developingu w Symfony2 przyjęliśmy strategię, że:
- W "pełnej" aplikacji stosujemy do wszystkiego (Routing, Doctrine, Walidacja, DependencyInjection, Security) adnotacje.
Niebywale przyspiesza to proces tworzenia systemu. Szczególnie pięknie się tworzy
modele, gdy w "jednym ciągu" piszesz kod - pola klasy, od razu określasz mapowania doctrine i reguły walidacji. Świetnie się to sprawdza bo nie trzeba żąglować 3 plikami (php'owy model, xml do walidacji, xml do mapowania, xml do...) tylko wszystko robisz w jednym. Masz natychmiastowy wgląd na wszystko.
Natomiast adnotacje od
DependencyInjection powodują, że nie musisz pisać dlugaśnych xmlów. Tworzysz klasę php - serwis. Dodajesz admotacje @Service, @Inject... i masz już stworzony serwis - bez przydługiego xmla

(umożliwia to JMSDIExtraBundle)
I to w efekcie jest ten słynny Rapid Development

)
- w bundleach, które są przewidziane na wydanie open source lub do użycia przy innych aplikacjach (wewnatrz firmy) stosujemy XML. Popularny, "sformalizowany" format, bardziej uniwersalny od adnotacji. Ma też swoje zalety - podpowiadanie składni w IDE ;P
PS.
O wydajność się nie martwcie bo wszystko jest pięknie cacheowane do zwyklego php.