Merhaba üstadlar,

Spring MVC ile bir web uygulaması geliştiriyorum. Tahmin edebileceğiniz gibi; controller, service, ve repository katmanlarım var. Katmanlara erişim konusunda merak ettiğim birkaç konu var.

Anlayabildiğim kadarıyla; controller sınıflarında HTTP istekleriyle gelen verileri kullanıp Java nesnelerini oluşturuyorum. Bu nesneleri, service katmanındaki sınıflarda işleyip, veritabanı işlemleri için de repository sınıflarını kullanıyorum. Hiçbir şekilde controller sınıflarından repository sınıflarına direkt erişim sağlamıyorum. İki katman arasında her durumda service katmanı yer alıyor.

  1. Controller sınıflarından, direkt olarak repository katmanına bağlanmak doğru mudur? Bazı durumlarda service katmanındaki metodlar, yalnızca repository katmanındaki metodları çağırıyor. Herhangi bir işlem yapmıyor aracı olmak dışında. Örneğin; void saveCustomer(Customer customer) { repository.save(customer); }
  2. Bazı durumlarda repository sınıflarında, farklı bir repository sınıfındaki metodlara ihtiyaç duyuyorum. Bunun gibi durumlarda ARepo > BService > BRepo şeklinde erişim sağlıyorum. Direkt olarak ARepo > BRepo şeklinde erişim sağladığımda bir sorun teşkil eder mi, bu şekilde kullanmak doğru mudur?

Son olarak; katmanları, üstüne yüklenen sorumlulukları anlatacak bir detaylı bir kaynak verebilirseniz minnettar olacağım.

soruldu: 25 Tem, 14:17

acemi's gravatar image

acemi
8702515
cevap kabul oranı: 36%

Service sadece kendi repository'ini inject etmeli, service -> diğer entity'lerin service'ini inject etmeli. neden.. mantıksal olarak erişim ayrımı yapmış olursunuz, diğer açıdan direkt repository katmanında darboğaz yaratmaktan kurtulup, business logic denen mübarek kısmı service katmanında yapmış olursunuz ve service üzerinden diğer servislere açmış olursunuz. Teknik değil, mantıksal ayrımlardan bahsediyorum :)

(26 Tem, 01:40) Turgay Can Turgay%20Can's gravatar image

Yorumunuz için teşekkür ederim. Peki controller sınıflarından, direkt olarak repository sınıflarına erişim olmalı mı, yoksa arada service sınıfları mı yer almalı her zaman?

(26 Tem, 03:41) acemi acemi's gravatar image
1

Bana göre, service katmanı olmalı..

şöyle ki bir sorgu attınız repository'den int -> id değerini dönüyor. Bir controller id değeri olup, olmadığını kontrol eder.. bu kısım business logic'tir bunun service'te olması gerekir. diğer bir controller ise id değerini alıp, farklı bir iş yapacaktır.

işte bu logical ayrım için service katmanı oluşturup, bir metod hasSomeThing() -> boolean bir değer döner, diğer metod ise getId() -> int bir değer döner..

(27 Tem, 14:46) Turgay Can Turgay%20Can's gravatar image

Bende dediğiniz gibi kullanıyorum . Bazen diyorum ki lan ben bu service ile direkt repository ' e bağlanıyorum ya hani controller'den bağlanırsam olmaz mı ? Diye kendime soruyorum ama sorun şu; yazılımı gevşetmek lazım bir işi ne kadar bölersek kod o kadar açılır ve bakımı kolaylaşır . Her işin bir kuralı vardır. Controller sınıfı ayakçı değil ki gidip repository(depo) ' dan veri çeksin kafasına göre . Controller sınıfı repository sınıfının varlığını bile bilmemeli. Service'ninde adı üstünde içinde extra bir işlem yapmasına gerek yok. Sadece servis yapsın yeter onun görevi o yani bu mimarinin kuralları yapman lazım ama yapmazsan da olur. Tabi kurallara aykırı olur :)

permanent link

cevaplandı: 25 Tem, 14:33

Qmer05's gravatar image

Qmer05
13041332
cevap kabul oranı: 0%

değiştirildi: 25 Tem, 14:33

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×47
×42
×5

Soruldu: 25 Tem, 14:17

Görüntüleme: 184 kez

Son güncelleme: 27 Tem, 14:46

powered by BitNami OSQA