Büyük kolaylık: NHibernate

Üzerinde çalıştığım bir proje gereği NHibernate ile tanıştım. Şimdiye kadar abstraction, data, facade, entities gibi layer’ların içinde kaybolmaya hiç de gerek yokmuş. NHibernate veritabanı objelerinin kalıtımını ve object oriented olarak kullanımını; entity’lerin otomatik olarak oluşturulmasını ve uygulamanın tamamiyle veritabanı bağımsız olması seçeneklerini kolayca sunuyormuş.

Her yiğidin bir yoğurt yeyişi vardır diyeceksiniz fakat bazen hazır yoğurt yemek insana oldukça sürat kazandırabiliyor. Özellikle de vaktiniz kısıtlıysa.

Dip not: Java’nın Hibernate’inin, .NET’e port edilmiş olanıdır.

http://www.nhibernate.org

12 Responses

  1. Tuna Toksöz says:

    NHibernate’e linq syntaxı gelince her şey daha güzel olacak.
    ORM tool denilebilecek ADO.net Entity Framework var, DLinq üstüne kurulu ama şu an CTP ve yeni ctpler orcas yanında veriliyor sanırım.
    DLinq ile idare etmek durumundayız şu halde :)
    Deneyin derim, NHibernate mutlaka iyidir fakat DLinq daha kolay, özellikle projection ve query yaparken. Onun dışında Database taraflı bir sayfalama yeteneğini de es geçmemek lazım.
    Caching için getirdiği pek bir şey yok dlnq’nun (yanlış biliyor olabilirim).
    Bakın derim.

  2. Coskun SUNALI says:

    Tuna Bey,

    Aslına bakarsanız NHibernate ile uzun süreli bir geçmişim yok. Ancak son bir haftadır ayrıntılı inceleme şansım oldu. Entity’ler üzerinde veritabanına map edilmemiş property’ler ile çalışmak, Map edilmemiş sorgular oluşturmak gibi basit işlemler NHibernate üzerinde kesinlikle ölüm demek.

    Açıkçası DLinq’i çok fazla inceleme şansım olmadı, o yüzden üzerinde yorum yapmak istemiyorum. Fakat inceleme fırsatı bulduğum anda, fikirlerimi sizinle paylaşacağım.

    İlgi ve alakanız için teşekkürler.

  3. Eyüp says:

    Nhibernate cidden kod yazımını dehşet derecede basitleştimiş. 2 satırla ekle sil güncelle. Tabi ilk adımda kullanılacak olan databasedeki tabloları ve fieldların XML ve classlarını hazırlamak. Bu uzun, sıkıcı ve dikkatli olunacak olan süreci daha da kısa sürede yapabilmek için otomatik genarade eden bi iki free tools kullandım. Hatta işi biraz daha derinleştirip Nhibernate ile oluşturulan bu layer ile database ile kod layerlarını birbirinden ayırdıktan sonra. Kodlar ile Nhibernate layerı arasına bir layer daha yerleştirerek Nhibernate den de bagımsızlaştım. Proje bittiğinde sistemin ORACLE, SQL SERVER yada başka bir database’e bağlı kalmadığı gibi Nhibernate toolu yerine benzer bir toolda kullansam kodların değişmesine hiç gerek kalmadı. Bu ikincisi müşteri tarafından çok önemli olmasada Database olan bağımlılığın kalkması müşteri için çok önemli bir husus. Nhibernate’ de save , update, delete işlemleri çok basit gibi görünsede karışık raporlamalarda bazen çıkış olmuyo. Çıkışın olmadığı yerlerde ise hibernate’e özel olan ve sqle azda olsa benzeyen HQL yazarak çıkış bulmaya çalışıyorum. Ama bazen bu bile yetersiz kalabiliyor. Yardımım dokunursa bu konuda elimden geleni yaparım. Saygılar

  4. NHibernate gerçekten güzel DAL ile uraşmıyorsunuz direk BO ile başlıyorsunuz fakat bizim en çok sıkıntı çektiğimiz noktalar Group By ve master child objeler de oldu. Group By özelliği NHibernate te var zaten HQL ile yapıyorsunuz ancak gelen datayı object collection a parse edemiyorsunuz yada biz başaramadık.
    Bunun dışında master child kayıtlarda kurulan relation da veri güzel bir şekilde geliyor ancak yeni kayıt ve update işleminde ne master ı ne detail i kaydediyor. Collection lar içinde foreach ile dönüp kaydetmek zorunda kaldık. Tabi ki oturup çok fazla uğraşmadık belki bunların çözümleri vardır. Biz projemizde NHibernate 1.1.4322 kullanmıştık sonraki versiyonlarda belki çözülmüştür.
    Linq yu deneme fırsatım olmadı ama aldığım duyumlarda herkes muhteşem diyor bu konuya da ağırlık verirseniz sevinirim. NHibernate, Hibernate in 3.0 versiyonuna yetişene kadar Linq u onu siler diye düşünüyorum ancak önce Linq u yu görmek bir projede kullanmak lazım yoksa NHibernate çok güzel ve yararlı oldu. Teşekkür ediyorum saygılarımla

  5. Hasan says:

    Dikkatimi çeken birşeyi sizlerlerle paylaşmak istedim. NHibernate ile tanışmam yaklaşık 10 ay önce oldu. Kendi kendime .net ortamında neler yapabiliriz diye sorupta araştırma yaparken NHibarnate ile tanıştım. O sıralar türkçe yazılan çok yazı yoktu, yazılanlarda genelde ingilizce yazılmış yazıların direkt olarak türkçeye çevrilmiş halleri idi. Şimdi yazılanları okuyorum ve hep eleştiri hep eleştiri, o kadar komik yorumlar varki anlatamam. NHibernate’in tanımını bile yaparken yazılan yanlışlar beni güldürüyor. Kimse bu uygulamanın tam olarak neler yapabileceği konusunda(saçma sapan eleştiri yapanlar için söylüyorum) bir proje geliştirip, çektiği skıntıları ve bu sıkıntıları nasıl aştığı, aşamadığı sıkıntıların başka çözümü var mı ? gibi tamamen bilgi paylaşımı yapmıyor. 2 tane table alıp bunlara xml hazırlayıp , class ları uygulamaya gömüp, kaydet dedim kaydetti, sil dedim sildi ama işte şöyle zor şöyle karışık gibi paylaşımlarım da bize hiç bir faydası yok. Mesela NHibernate destekli Object grid var mı?(hani şu her işi yapan gridlerden), ya da proje bitmeye yakın artık şu raporları tasarlayalım ama proje baştan sona ORM rapor için direkt database e bağlanıp yapıyı bozacakmıyız yoksa bunun için geliştirilmiş raporlama toolları varmı. Objelere bağlanıp çıktı alacak. Ya da Eyüp bey’in bahsettiği HQL ile neler yapılabilir. Ben şunu çok iyi biliyorum ki JAVA dünyasında insanlar Hibernate kullanıyorlar ve herkes halinden çok memnun. O kadar çok tool var ki ve bu insanlar o kadar ağır projeler oluşturuyorlar ama tamamen O2RM ve kullandıkları temel Hibernate. Unutmayalım ki yazılım işi hiçbir zaman herkesin çok yapabileceği bir iş olmayacaktır, tabiki zor olacak ve tabiki düzen ve disiplin gerektirecektir. Zor ve karışıklık bizim bilgimize göre değişebilir. Saygılarımla.

  6. Coskun SUNALI says:

    Eyüp Bey, Ümit Bey, Hasan Bey,

    Değerli katılımlarınız ve fikirleriniz için teşekkür ederim.

  7. Erol Bey says:

    Sadece Hasan Arkadaşımıza Katıldığımı belirtmek için yazıyorum.. gözlemleri çok doğru. teşekkürler.

  8. MuratHAKSAL says:

    Nhibernate 2 kurumsal proje geliştirdim, group by, filter, expression gibi konularda 3. party tool kullandım.(Infragistics) Bu hiç sorun olmadı, Entity katmanında her nesnenin instance dönen bir valueField ve facade katmanında join için tüm nesnelerin assembly bilgilerinden çok rahatlıkla dönebilrsiniz.
    Yardımcı olması acısından yazdım Kolay Gelsin….
    Teşekkürler
    MH

  9. Eyüp says:

    @Ümit Gündüz SELAMlar Ümit bey;

    O bahsettiğiniz işlemi bende projemde çok denememe rağmen başaramadım bir türlü gelen veri Object Collectiona parse edilemiyo. Sanıyorum ki bunun sebebi de şu. HQL ile yazılan querylerin sonucunda dönen listenin herhangi bir type ı yok. O yüzden foreach ile tek tek yapmamız gerekiyo. Hoş gerçi type lı olsada nasıl bir method kullanılacak bilmiyorum henüz veriyi typelı alamadığım için o aşamaya geçemedim. Umarım üst versiyonlar da vardır . yada yapılmış bir örnek denk gelir.iyi çalışmalar

  10. M. Tahir Çakmak says:

    Selamlar;
    Hasan Bey demiş ki:
    “Unutmayalım ki yazılım işi hiçbir zaman herkesin çok yapabileceği bir iş olmayacaktır, tabiki zor olacak ve tabiki düzen ve disiplin gerektirecektir.”

    Ben bu cümleye o kadar katılmıyorum. Önemli olan biz yazılım uzmanlarının ya da yazılım mimarlarının: projeyi neredeyse Jr. Programcıların dahi kodlyabileceği hale getirmek olmalı. Çeşitli frameworkler, satın alınan development ürünleri; ne kullanacaksak kullanalım hedef bu olmalı.

    Diğer taraftan Nhibernate’e gelince küçük bir çalışma ile .Net’in ObjectDatasource ve DataBinding yapıları ile beraber çalışabilir hale gelebiliyor. Bu açıdan oldukça hızlı ve kolay kullanılabilir.

    Kısacası her proje ekibinin bir yazılım mimarı vardır(ya da olmalıdır), çünkü hedef kolay kodlamayı kolaylaştıran fikirler bulmaktır..

    İyi çalışmalar…

  11. ihsan says:

    Sizler hiç EnterpriseLibrary kullandınız mı? Nettires Template’i ile birlikte ?

  12. Hasan says:

    Neredeyse 2 yıl önce yukarıdaki yazımı okudumda, zaman ne kadar da cabuk geciyor. Yazılım Teknolojileri müthiş bir hızla ilerliyor ama bu ilerleyiş öyle çokta jr. programcılar tarafından yapılmıyor yukarıda Tahir Bey’in dediği gibi olmuyor yani. Hele ki şu devirde yanlış yazılım üzerine inşa edilmiş sistemlerin sıkıntılarını ben şahsen fazlasıyla çekiyorum. Tekrar ediyorum, öyle her önüne gelen yazılım işi ile uğraşmamalı. Çünkü o programı kullanan insanların nasıl kıvrandığını ben çok iyi biliyorum. Şimdi siz tutupta her önüne gelene inşaat yaptırırmısınız. Teknolojisi ne olursa olsun herkes çok kolay bina dikebilir mi ? Ya da yazılım işinin inşaat işinden ne farkı var söylermisiniz. Neyse o konuyu kapatıp asıl konumuza dönecek olursak. LINQ diyorum ve saygı duyuyorum. Microsoft LINQ işini çok iyi becerdi. ADO.NET Entity Framework var ki bence araştırılmalıdır.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.