Symfony camiasının genel tartışması annotation mı yoksa yaml configuration daha kullanışlıdır. Tüm açılardan bakarak karşılaştırmaya çalışacağım. Aynı zamanda XML de bu karşılaştırmaya katılabilir fakat birçok bundle XML configution desteklemediği için şimdilik ayrı tutuyorum.

Speed (Hız)


Herkezin ilk düşüncesi muhtemelen hız farkı olur mudur? Baştan söyleyeyim ikisi arasında eğer ki bir Symfony projesinden bahsediyorsak hiçbir hız farkı olmayacaktır (Symfony Core Configuration için bahsediyorum). Sebebi şu ki Symfony yi az biraz bilenler bilir bu mantık Doctrine dede aynı şekilde ilk request veya cache:warmup işleminde annotation, yaml veya xml farketmeksizin php ye convert edilir. Sonraki request ler için direk pure php den okunur bu yüzden Doctrine veya Symfony configuration farketmeksizin hız bakımından bir karşılaştırma yapılamaz.

Readability (Okunabilirlik)


Bu maddede bence yaml çok daha readability si yüksek çünkü gereksiz hiçbir karakter içermeden minor indentations ile hızlıca configuration yapabiliyorsunuz. Ayrıca Yaml ı birçok IDE fazlasıyla destekliyor auto indentation yapabiliyorsunuz ve bir standart a bağlı. Annotation da maalesef belirli bir standart olmadığı için okunabilirlik yerlerde, birçok IDE extra plugins ile destekliyor fakat stabil çalışan yok denebilir. Annotation için auto indentation yapan bir plugin yok bildiğim kadarı ile. Eğer ki bir de Doctrine conf. u Annotation ile yapayım derseniz readability ölü diyebiliriz. Bunu verdiğim linkten rahatlıkla anlayabilirsiniz.

Eğer ki birde büyük bir projeden bahsediyorsak muhtelemen onlarca extra bundle kullanılacaktır. Bunun sonucu olarak entitylerde 30 line lara kadar propery annotation görmeniz muhtemel hale geliyor.

İçerikten anlaşılacağı üzere bu maddede ben kesinlikle Yaml destekçisiyim.

Yazım kolaylığı


Eğer ki küçük bir projede çalışıyorsanız misal 2 kişinin çalıştığı max. 20 action olan bir minor bir sistem ise Annotation size fazlası ile hız kazandıracaktır extra dosya create etmeden misal routing için direk action larda annotation kullanarak rahat ve hızlı şekilde yazabilirsin. Aynı şekilde max. 3 entity ile işim var ve çok karmaşık relationsum yok dersen aynı şekilde annotation kullanabilirsin. Ama dersen ki projede 5> kişi var, aktif development süreci var, 300> action ımız 50> entity ve relations çorba dersen kesinlikle Yaml derim, eğer annotation kullanıp gününü conflict resolve ile harcamak istemiyorsan.

Büyük projelerde annotation kullanımında bir süre sonra özellikle entity lerde her bundle için bir conf. ekleyerek 50 line lık bir entity olacaktır 1000 line sonrasında bug çıktığında hangi line da problem var çözmesi zaman alacaktır.

Sonuç olarak bu maddede büyük proje ise kesinlikle Yaml, küçük projeler için Annotation kullanılabilir diyorum.

Grup Çalışması


Symfony nin en aşık olduğum felsefesi directory yapısının mükemmel şekilde dizayn edilmiş olmasıdır. Aynı zamanda naming konusunda gerçekten çok titiz olmaları. Aynı mantıkta bir projede directory yapısını ne kadar düzenli tutarsanız, development ında o derece düzenli ve mantıklı ilerlemesi muhtemel. Bunu fazlasıyla tecrübe etmiş birisi olarak, büyük projelerde proje directory root u ne kadar dağınık(tek merkezde toplanmamış) tutulursa development kolaylığı da o derece kolaylaşıyor.

Bahsettiğim dağınık yapı Yaml ile sağlanabilir. Misal doctrine configuration bir directory de, routing bir directory, validation bir directory, services bir directory de vb. birçok örnek verilebilir. Annotation için düşünürsek entity içerisinde doctrine, validation, bundle configuration da olsun bu da olsun derseniz bu daha merkeziyetçi bir yaklaşım oluyor.

Dağınık yapının ilk yararı git conflict resolve sürenizi minimize eder :). Bir projede 5> kişi çalışıyorsa birisi routing üzerinde çalışırken bir diğeri controllers üzerinde çalışabilir. Aynı şekilde birisi entity lerde düzenleme yaparken diğeri aynı entity nin validation kısmına bakabilir.

Dağınık yapıda file history den fazlasıyla bilgi alınabilir. Benim fazlasıyla kullandığım bir tool dur github da olan aynı zamanda commandline dada bakabileceğiniz, bir dosyanın change history si. Eğer ki misal validation ile ilgili bir history ye bakmak istiyorsunuz Yaml da sadece related entity nin validation dosyasının history sine bakarak çok daha sağlam bilgi edinebilirken. Annotation da related entity nin git history sine bakacaksınız alakasız birçok commit i incelemeniz muhtemel.

Git için benim genel felsefem herzaman için minor parçalar halinde çok commit atmaktır. Sebebi farklı birisi yaptığın işlere baktığında hangi commit ile ne amaçladın en ince detayına kadar anlayabilsin. Bu felsefeyi en iyi destekleyen yapı tabikide dağınık directory yapısı, Yaml configuration.

Bu maddedede benim düşüncem eğer ki 5> kişilik bir proje ekibi varsa Yaml zorunluluk.


Son cümlem: “Sağlam bir projem var diyorsan Yaml, diğer türlü Annotation”


İyi Günler.