6. Üç katmanlı uygulamaları yapılandırmak için Spring
Burada, Spring'in üç katmanlı uygulamaları yapılandırmak için nasıl kullanılabileceğini bir örnek üzerinden inceleyeceğiz. Bu tür uygulamaların yaygın bir örneği web uygulamalarıdır.
6.1. Sorun
Aşağıdaki yapıya sahip bir üç katmanlı uygulama oluşturmak istiyoruz:
![]() |
- Üç katman, arayüzlerin kullanımı sayesinde birbirinden bağımsız hale getirilecektir
- Üç katmanın entegrasyonu Spring tarafından sağlanacaktır
- Üç katmanın her biri için ayrı paketler oluşturulacak ve bu paketlere sırasıyla [control], [domain] ve [dao] adları verilecektir. Ek bir paket olan [tests] ise test uygulamalarını içerecektir.
6.2. Veri erişim katmanı
DAO katmanı aşağıdaki arayüzü uygulayacaktır:
Namespace istia.st.spring3tier.dao
Public Interface IDao
' katmanda bir şey yapmak [dao]
Function doSomethingInDaoLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- Dao1Impl1 ve Dao1Impl2 adlı iki sınıf yazın; bu sınıflar IDao arayüzünü uygulayacaktır. Dao1Impl1. doSomethingInDaoLayer yöntemi a+b sonucunu verecek ve Dao1Impl2. doSomethingInDaoLayer yöntemi a-b sonucunu verecektir.
- Yukarıdaki iki sınıfı test eden NUnit adlı bir test sınıfı yazın
6.3. İş mantığı katmanı
İş katmanı aşağıdaki arayüzü uygulayacaktır:
Namespace istia.st.spring3tier.domain
Public Interface IDomain
' katmanda bir şey yapmak [domain]
Function doSomethingInDomainLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- Domain1Impl1 ve Domain1Impl2 adlı iki sınıf yazın; bu sınıflar IDomain arayüzünü uygulayacaktır. Bu sınıflar, bir genel özellik aracılığıyla başlatılabilen IDao türünde özel bir alana sahip olacaktır. [DomainImpl1] sınıfındaki doSomethingInDomainLayer yöntemi, a ve b değerlerini bir birim artıracak ve ardından bu iki parametreyi alınan IDao1 türündeki nesnenin doSomethingInDaoLayer yöntemine aktaracaktır. [Domain1Impl2elle] sınıfının doSomethingInDomainLayer yöntemi ise, a ve b değerlerini bir birim azaltacak ve ardından aynı işlemi gerçekleştirecektir.
- Yukarıdaki iki sınıfı test eden NUnit adlı bir test sınıfı yazın
6.4. Kullanıcı arayüzü katmanı
Kullanıcı arayüzü katmanı aşağıdaki arayüzü uygulayacaktır:
Namespace istia.st.spring3tier.control
Public Interface IControl
' katmanda bir şey yapmak [control]
Function doSomethingInControlLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- IContro1 arayüzünü uygulayan Control1Impl1 ve Control1Impl2 adlı iki sınıf yazın. Bu sınıflar, bir genel özellik aracılığıyla başlatılabilen IDomain türünde özel bir alana sahip olacaktır. [Control1Impl1] sınıfındaki doSomethingInControlLayer yöntemi, a ve b değerlerini bir birim artıracak ve ardından bu iki parametreyi alınan IDomain1 türündeki nesnenin doSomethingInDomainLayer yöntemine aktaracaktır. [Control11Impl2] sınıfının doSomethingInControlLayer yöntemi ise, a ve b değerlerini bir birim azaltır ve ardından aynı işlemi gerçekleştirir.
- Yukarıdaki iki sınıfı test eden NUnit adlı bir test sınıfı yazın
6.5. Spring ile entegrasyon
- Önceki üç katmanın her birinin hangi sınıfları kullanacağına karar verecek bir Spring yapılandırma dosyası yazın
- Yazılan uygulamanın esnekliğini ortaya koymak için farklı Spring yapılandırmaları kullanan bir NUnit test sınıfı yazın
- IControl arayüzünün [doSomethingInControlLayer] yöntemine iki parametre veren ve arayüzün döndürdüğü sonucu görüntüleyen bağımsız bir uygulama (main yöntemi) yazın.
