search
Giriş
Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın Türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi
1 oy
2.6k gösterim
Merhaba

Spring MVC deki yapı Controller => DAO=> Model=> DB şeklinde.

Controller ile DAO arasına bir de Service Layer denilen bir katman daha konuyor. Tam olarak bu katman ne işe yarıyor. Fazladan bir iş gibi geldi bana bilen var mıdır?

Teşekkürler

İyi haftasonları
kapalı
Java kategorisinde 211 puan

1 cevap

0 oy
 
En İyi Cevap

MVC yani Model/View/Controller. Burada service katmanı yok. Sadece MVC kullanarak bir uygulama geliştirmeyi düşünüyorsan bir service katmanına ihtiyacın da olmayacak. Yani söylemek istediğim; MVC ile Service  dediğin kısım birbirinden ayrı ele alınması gereken bir konu.

Ayrıca Model->DB dediğin konu da çok doğru bir tanım olmuyor.

Service katmanını anlamak için önce n-tier architecture konusunu bilmen gerekiyor. Genelde bu tier sayısı 3 olur. 3-katmanlı mimari olarak kullanılıyor daha çok. Senin burada sorduğun sorunun cevabı n-tier den gelen ve business katmanının karşılığı olan kısım oluyor ki; Spring bunun desteğini zaten MVC olmadan da verebiliyor. Bunu biraz daha resmi bir tanıma taşıyalım.

Yazılımda daha önceden kullanılan kavram n-katmanlı mimari.

Önce onu biraz tanıyalım/hatırlayalım.

3 katmanlı mimaride kullanıcıya verdiğin ekran(presentation/sunum), asıl işi yapan kod kısmı(business) ve DB erişim (data access) kısımları birbirinden ayrılır ki kodları birbirine girip çorba olmasın. Aslında uygulaması zor bir konu değil. Senin sorduğun service katmanı tam olarak buradaki iş mantığı katmanı (business layer) oluyor.

Model->DB dediğin yer veri erişim katmanı(Data access layer) oluyor ki MVC ile işi yok.

Peki MVC ile bunun alakası nedir? Önceleri yazılım konusunda bu kadar tecrübe yokken ve yazılan uygulamaların kod tabanları bu kadar büyük değilken bu katmanlar birbirinden çok ayrılmıyordu. Şimdiki tabirle karışık yazılıyordu. Zamanla uygulamaların bakımları, geliştirmeleri farklılaşmaya başladı. Daha sonradan ekran görüntüsünü veren, işi yapan, veriye erişen katmanlar birbirinden ayrıldı. Aslında mantıken eğer arada network, farklı donanımlar gibi etkenler varsa katmanları daha da artırablirsin. Bu katmanlara da katmanlı mimari ismi verildi. Sonra ekranı tasarlamak ve bakımlarını yapmak için sunum katmanı kendi içinde veriyi tutan (model), bu veriyi gösteren(view), verinin gösterilme şartlarının belirlendiği (controller) kavramlara ayrıldı. Senin sorduğun soruda detaylarını bilmesen bile MVC kullanırken aynı anda n-tier mimari de kullanmış oluyorsun. Normalde MVC kullanmasan bile n-tier kullanabilirsin. Hatta kullan.

Spring de kendi çapında bunlara isim veriyor. 

- Sunum/Presentation için MVC - @Controller
- İş/business için Service -@Service
- Veri erişim/data access için Repository - @Repository

Umarım güzel anlatabilmişimdir.

Kolay gelsin.

6.2k puan
seçti
Çok Teşekkürler

İlgili sorular

0 oy
1 cevap 443 gösterim
443 gösterim
AngularJS'deki service layer (katmanı) ve controller arasında ne fark vardır?
15 Temmuz 2017 Javascript kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 1.5K gösterim
1.5K gösterim
Selam, Serializable interface ini implement ettikten sonra, "Adds a default serial version ID to the selected type." diye bir uyarı çıkıyor, serialVersionUID ne için kullanılmaktadır bilgisi olan var mı?
4 Şubat 2017 Java kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 909 gösterim
909 gösterim
Java programlama dilinde "inheritance" kavramının ne işe yarar? nasıl kullanırız kod örneği verebilir misiniz?
23 Aralık 2016 Web Programlama kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 1.8K gösterim
1.8K gösterim 20 Nisan 2019 Java kategorisinde sinan 291 puan sordu
0 oy
1 cevap 1.5K gösterim
1.5K gösterim
Spring boot, spring security , spring cloud vs. nedir? Farkları nelerdir ?başka ürünler var mıdır?
27 Temmuz 2017 Java kategorisinde tolgacelik.art 2.0k puan sordu