PhpKonf istanbulda php konferansında Muhittin Özerin İlişkisel veritabanları ve Doctrine sundundu.
Sunumuna uzun uzun orta okul db bilgileri anlatarak başladı. İlişkisel veritabanı nedir,
aralarında neler var vb. Sonra orm'nin faydasını sıraladı, bir
veritabana mahküm kalmamak, kodun güzel gözükmesi. Tabi dezavantajlarına
gelip performans yazınca ekranda, suç programcının oldu: "Bazıları der
yavaştır. Tabi kötü yazılırsa kod yavaşlık olur, ormler hızlıdır
aslında, tek sayfalık bir site yapıp orm kullanırsanız yavaşlar, orm'ler
büyük kapsamlı projeler içindir, böyle projelerde hız farkını
anlarsınız. Ama sorguların güzel yazılması, db indekslerinin hazırlanmış olması gerekir".
Doctrinin diğer frameworklerle karşılaştırılmasında salondan çıkmak zaruret
oldu. stackoverflow'dan soruları almış, 4500 doctrin sorusu var, en
yakın rakibi 800 soruda. Bir arkadaş cevaplar da önemli dedi. Bu "Muhittin"
arkadaş, 4500 soruda elbette 800 cevaptan fazla yanıt vardır. (süper!)
olmadığını düşünmek saçmalık olur" (batırdın arkadaş!) dedi. Sonra
topladım eşyaları çıktım.
ORM hakkında düşüncelerim:
Kod içinde sql sorguları çok
kötü. model katmanında bile php yazıyoruz, sql nerden çıktı diyoruz.
Aynı zamanda mysql'den mongo'ya yada postgresql'e sorunsuz bir geçiş
stratejisi çizemem.
Fakat Orm özellikle php'de büyük dert.
db şemalarını çıkarması, bizi uğraştırmaması, şemaları koda yansıtması,
koddaki değişklikleri db'ye yansıtması. Bunları yaparken hızlı
initialize olması, hafızada az yer tutması vb.
Yok böyle
bir orm. Orm ortaya kocaman kütlesi, onlarca yan destek sınıfları ile
oturan hantal bir yapıdır. Siz gereksinimlerinizi php kod olarak
yazarsınız, orm araçları bundan sql üretir. Native yazmadığınızda da
kodun nerede patladığını görme şansınız azalır.Bir kodu siz normal sql
araçları ile optimize edemezsiniz. Kodda deneyip yanılabilirsiniz. Php
kullanma nedenimiz zaten koder'a yüklenmemekti, şimdi en ufak hatanın
ceremesini çeker hale geldi. Ve bunu hız ve memory kayıplarına rağmen
yaptık. Şöyle bir gerçek var ki, çalıştığım şirket, 10 yıldır db
değiştirmedi. Memcache veya mongo destek için geldi. E hakkaten model
katmanına baktığımızda native mysql sorguları ne olacak? Sanki o katman
bunları görmek için var. E biz view'da aman html olmasın, js css karışmasın diyo muyuz?
Bu kadar laf saydım. Fakat gerçek hayatta kodun db bağımsız olmasını istersek ne yapacağız? Ya orm kullanmadan tüm modelleri diğer db için de yazacağız yada projede orm kullanacağız. :) Gerçek hayat ihtiyaçları, teoriyi döver!