Kitaptan ufak bir kesiti sizlerle paylaşıyorum. Kitaptaki Spring JdbcTemplate konusunun bir kesitidir.

SPRING

JDBC bileşenleri için bir soyutlama katmanı sunmaktadır. ResultSet, hata ayıklama vb tüm işlemler için sadece soyutlama yapıyor. Yani bu bileşenlerin kullanımını kolaylaştıran bazı interfaceler, arabirimler sağlıyor. Böylece developer yönetmek zorunda olduğu birçok işlevi hazır buluyor ve kullanıyor.

Görüntünün sol tarafı Spring JdbcTemplate ile sağ tarafı saf Jdbc ile benim tarafımdan yazıldı.
Sağ taraftaki metodu 110.05-com.jdbc.dao paketi altında bulabilirsiniz.

Hatırlarsanız ben, o örnekte düzgün bir tasarım altında JDBC işlemlerini incelemeye çalışmıştım.

  • Interface’ler oluşturdum.
  • Bağlantı bilgilerini properties dosyadan okudum.
  • Bağlantı nesnelerini bir sınıfa verdim.
  • Bağlantı kapama vb işlemler için atomik metotlar yarattım.
  • Queryler için constant yarattım.

Çok ince düşünmediğim halde, bazı genel tasarım kuralları içerisinde sağ taraftaki o metotu elde ettim. Baktığınızda solda Spring altındaki metot ile arasında ciddi farklar görünmüyor.
Spring geliştiricileri ince eleyip sık dokuyarak biraz daha güzel bir tasarım ortaya koymuşlar. Sonuç,

Bizler de ince düşünürsek böyle işleri başarabiliriz. Bu işin heyecan tarafı.
Burda göstermek istediğim Spring nasıl çalışır. Arkadaşlar hep söylediğim gibi hiçbir Java frameworkü gökten yeni bir vahiyle gelmemiştir. Altında daima java bileşenleri vardır. Sadece güzel tasarım altında ele alınırlar. Gökten gelmişler gibi hep yukarı bakmayalım, temellerine inelim.

Aslında ne oldu?

JDBC için

  • getTableDetail() metotta getDBConnection() ile connection nesnesi üretildi.
  • connection, datasource bilgileri properties dosyasından okundu.
  • prepareStatement(CarDetailQuery.UPDATE_QUERY_CARDETAIL) ile statement yani sorgu hazırlandı. Sorgu constantları taşıyan CarDetailQuery sınıfıda tutuluyor.
  • ResultSet resultSet = pstmt.executeQuery() ile sorgu çalıştırıldı ve sonuç resultSet nesnesine yüklendi.
  • resultSet nesnesi iterate ediledilerek üzerinde olan bilgiler CarDetail sınıfı ile maplendi.
  • hata var ise hatalar yakalandı.
  • hata yok ise connection vb nesneler kapatıldı.
  • sonuç döndü.

SPRING için

  • JdbcTemplate kendinde bulunan Datasource nesnesi ile bağlantı kurdu.
  • Datasoruce, applicationContext.xml deki bilgileri okuyarak connection nesnesini üretti.
  • String readQuery ile statmet hazırlandı.
  • return jdbcTemplate.query(readQuery, new CarDetailMapper()) ifadesi ile
  • query çalıştırıldı
  • CarDetailMapper resultSet nesnesini kullanarak CarDetail sınıfı ile mapledi.
  • hata var ise hatayı Spring ele aldı, bizde devreye girebiliriz.
  • conntection vb işlevlerin yönetimini Spring ele aldı.
  • sonuç döndü.

Her iki akışı da incelediğimizde birbirinden farkı yok. Sadece isimlendirmeler belki kullanım yerleri farklı. O zaman, ben Türkiye’de yaşayan bir developer olarak işin özünü iyi anlarsam ve tasarıma dikkat edersem onca yolu frameworkler olmadan yalnız da yürüyebilirim.

Şöyle bir anlatımda da bulunabilirdim.

  • İlk olarak bir mapper yaratalım ismi, CarDetailMapper olsun.
  • Bu sınıfta veritabanı tablosundaki alanlarla model sınıfındaki alanları mapliyoruz.
  • Daha sonra JdbcTemplate nesnesi yardımı ile bağlantıyı kurup, sorguyu çalıştıyoruz.
  • JdbcTemplate bize sonucu maplenmiş şekilde dönüyor. Spring canavar gibi bizim yerimize birçok işi yaptı diyebilirim, kimse de kızamaz.

Bu da özü anlamadan ezber bilgi demektir. Ülkemizin onarılmaz hastalığı da budur.

Kitap hep teknolojileri karşılaştırmakla geçti. Evet, böylece Java teknolojilerinin çalışma mantığını daha iyi inceleyebiliyoruz. Aslında sadece Frameworkleri değil Java’nın kendisine ait ve belki de ismen bile duymadığımız bir çok bileşenin kökenine inmeye çalışıyorum. Kanaatimce bu yöntem Java dünyasında dönen olayları kavramaya yardımcı oluyor. Belki bir Spring JdbcTemplate yazmaya ayıracak vaktimiz, kaynağımız olmayabilir. Her şartta Java teknolojilerine ileri seviye hakimiyet ve tasarıma biraz özen göstererek daha güzel yazılımlar ortaya koyabiliriz. Tüm kitap boyunca anlatmaya çalıştığım şey aslında budur.

Yazdığım her framework konusunu Java içerisindeki teknoloji ile karşılaştırmak çok kolay değil. Bunun için ilk olarak yapmam gereken Java daki teknoloji ile karşılaştırdığım teknolojiyi benzer seviyeye getirmektir. Java’daki bir teknoloji temelden alıp güzel tasarım altında örnekleyeceğim ki bir sonraki kuşak framework ile kaşılaştırabileyim. Bu da hiç kolay iş değil. Çok mu ağladım.

Kitapta tüm konuları önce kendi içerisinde refactor edilerek yani seviye seviye kalite artırılarak ele aldım. Bu da yetmedi, popüler frameworkler ile karşılaştırma yaparak olaya derinlik kazandırmaya çalıştım.

CEVAP VER

Please enter your comment!
Please enter your name here