Asp.Net Mvc Veri Erişimi
-
Müritler kolay gelsin,
Bir süredir asp.net mvc projelerinde veri erişimi nasıl olmalıdır diye araştırıyorum.
Kullanılan 2 yöntem var.
1. Controller içerisinden entity framework direk erişim sağlayıp crud işlemlerini yapmak.
2. Generic repository pattern ile crud işlemlerini yapmak.
Repository pattern nedir diye soran olursa aşağıdaki linki inceleyebilir.
http://www.janholinka.net/Blog/Article/9
Büyük projelerde, özellikle controller içerisinde entity framework ile crud işlemleri yapmak MVC yazılım mimarisine uygun değil diye düşünüyorum.
Bu şekilde yapıldığında controller acayip şişiyor ve oldukça karmaşık hale geliyor.
Sizler veri erişimini nasıl yapıyorsunuz?
-
Hocam biz şöyle yapıyorduk. Kullanıcı Kaydı Örneğinden gidersek;
createUser (controller) -> UserManager.createUser (Manager) -> UserRepository.create (Repository)
Controller tarafında major validation'ları yapıp Manager'dan ilgili method çağırıyor. Bu method içerisinde Transaction yönetilip, try-catch kontrolleri yapılıyor. Burada işlem başarılı olursa Controller'a bir Result objesi döndürülüyor ve bu obje kullanıcıya response'da döndürülüyor. Repository tarafında da veritabanına kayıt işlemi gerçekleştiriliyor. Bir ara Repository Pattern'a bakmıştım. Bunun amacı DB bağımsızlığı sağlamak (yanlışsam düzeltin). Ancak EF kullandığında böyle bağlılık olmuyor ve Repository Pattern + EF kullanmak hammallık ve kodun daha çok dağılmasına sebep oluyor deniliyor (ve öyle olduğu çok fazla durumla karşılaştık)
* Repository Pattern ile ilgili yazı: https://ayende.com/blog/4784/architecting-in-the-pit-of-doom-the-evils-of-the-repository-abstraction-layer
-
TeRRoR bunu yazdı
Hocam biz şöyle yapıyorduk. Kullanıcı Kaydı Örneğinden gidersek;
createUser (controller) -> UserManager.createUser (Manager) -> UserRepository.create (Repository)
Controller tarafında major validation'ları yapıp Manager'dan ilgili method çağırıyor. Bu method içerisinde Transaction yönetilip, try-catch kontrolleri yapılıyor. Burada işlem başarılı olursa Controller'a bir Result objesi döndürülüyor ve bu obje kullanıcıya response'da döndürülüyor. Repository tarafında da veritabanına kayıt işlemi gerçekleştiriliyor. Bir ara Repository Pattern'a bakmıştım. Bunun amacı DB bağımsızlığı sağlamak (yanlışsam düzeltin). Ancak EF kullandığında böyle bağlılık olmuyor ve Repository Pattern + EF kullanmak hammallık ve kodun daha çok dağılmasına sebep oluyor deniliyor (ve öyle olduğu çok fazla durumla karşılaştık)
* Repository Pattern ile ilgili yazı: https://ayende.com/blog/4784/architecting-in-the-pit-of-doom-the-evils-of-the-repository-abstraction-layer
+1
-
@TeRRoR dostum teşekkürler cevap için fakat kullandığınız yöntemi tam anlayamadım.
Küçük bir kod örneği paylaşabilmen mümkün mü?
-
Diathorus bunu yazdı
@TeRRoR dostum teşekkürler cevap için fakat kullandığınız yöntemi tam anlayamadım.
Küçük bir kod örneği paylaşabilmen mümkün mü?
Hocam hazırda kod yok ne yazıkki. Ancak şöyle birşey buldum. Anlatmak istediğimi anlatıyor hatta Service Layer'da içinde. Buraya bir bakabilirsin. Kafan karışırsa yine yazarsın. https://www.asp.net/mvc/overview/older-versions-1/contact-manager/iteration-4-make-the-application-loosely-coupled-cs
-
Repository pattern kullanıyorum.
Controller'dan servisi çağırıyorum,
Entity framework kullanmıyorum, MVC altyapısı yeterli oluyor.
-
KuZeTaR bunu yazdı
Repository pattern kullanıyorum.
Controller'dan servisi çağırıyorum,
Entity framework kullanmıyorum, MVC altyapısı yeterli oluyor.
Hocam peki neden EF kullanmadın?
-
@TeRRoR dostum verdiğin linki okudum. ( https://ayende.com/blog/4784/architecting-in-the-pit-of-doom-the-evils-of-the-repository-abstraction-layer )
İnternette bu tarz bir kaç yazı var fakat bu yazılar sadece repository patter nin neden kullanılmaması gerektiğini anlatıyor.
Tamam repository pattern kullanmayalım da ne kullanalım? Hiç biri repository pattern yerine bir çözüm sunmuyor.
İş yerinde bir projeye başlayacağım. Controller' dan EF' ye direkt erişim sağlayıp işimi yapıp geçicem gibi duruyor.
Diathorus tarafından 21/Ara/16 12:45 tarihinde düzenlenmiştir -
Diathorus bunu yazdı
@TeRRoR dostum verdiğin linki okudum. ( https://ayende.com/blog/4784/architecting-in-the-pit-of-doom-the-evils-of-the-repository-abstraction-layer )
İnternette bu tarz bir kaç yazı var fakat bu yazılar sadece repository patter nin neden kullanılmaması gerektiğini anlatıyor.
Tamam repository pattern kullanmayalım da ne kullanalım? Hiç biri repository pattern yerine bir çözüm sunmuyor.
İş yerinde bir projeye başlayacağım. Controller' dan EF' ye direkt erişim sağlayıp işimi yapıp geçicem gibi duruyor.
Aman hocam öyle cayır cuyur controllarda yazma. Ama tabi uygulama 3-5 sayfalık öyle çak geç bir işse başka. Repository pattern database layer'in abstraction'u için bir çözüm ve EF bize bu imkanı zaten sağlıyor. Sen repository kısmını çık gerisini kullan. Controller içinde yapacağın logic'leri ayrı bir Manager-Business layer'da yapıcaksın.