Skip to content

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.