16. 3 katmanlı mimaride MVC web uygulaması – Örnek 2
16.1. Introduction
Aşağıdaki yapıya sahip [personnes-01] uygulamasını yazdık:
![]() |
[dao] katmanı, [ArrayList] nesnesi kullanılarak yönetilen kişi listesini hayata geçiriyordu. Bu sayede, [dao] ve [service] katmanları üzerinde fazla durmadan, [web] katmanına odaklanabildik. Uygulamayı, kişi listesinin bir veritabanı tablosunda depolandığı daha gerçekçi bir ortama taşımak istiyoruz. Bu, [dao] katmanını değiştirmemizi gerektirecek. Bu değişiklik, diğer iki katmanı da etkileyecektir. Spring IoC'in sağladığı katman bağımsızlığından yararlanmak için, [personnes-01] uygulamasını yeniden ele alıp Spring IoC ile yapılandıracağız:
![]() |
Yeni uygulamanın adı [personnes-02] olacaktır. Uygulama yazıldıktan sonra, [web] katmanının kodunda herhangi bir değişiklik yapmadan [dao] ve [service] katmanlarını değiştirebileceğimizi biliyoruz. İşte aradığımız şey budur.
6.2. paragrafta açıklandığı gibi, [personnes-01] projesini kopyalayıp yapıştırarak yeni bir Eclipse projesi olan [personnes-02]'i oluşturuyoruz:
![]() |
[1] içinde, [dao] ve [service] katmanlarının bean'lerini tanımlayacağımız yapılandırma dosyası görünür. İçeriği şöyledir:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- DAO sınıfı -->
<bean id="dao" class="istia.st.mvc.personnes.dao.DaoImpl" init-method="init"/>
<!-- hizmet sınıfı -->
<bean id="service" class="istia.st.mvc.personnes.service.ServiceImpl">
<property name="dao">
<ref local="dao" />
</property>
</bean>
</beans>
- 5. satır: [dao] adlı bean'i, [DaoImpl] sınıfının bir örneği olarak tanımlar. Örnek oluşturulduktan sonra, örneğin [init] yöntemi yürütülür.
- 7-10. satırlar: [service] adlı bean'i, [ServiceImpl] sınıfının bir örneği olarak tanımlar.
- 8-10. satırlar: [DaoImpl] örneğinin [dao] özelliği, 5. satırda oluşturulan [dao] katmanının referansı ile başlatılır. [ServiceImpl] sınıfının [dao] özelliğine ve buna ait setter'a sahip olduğunu hatırlayalım:
Elbette bu dosya tek başına hiçbir şey yapmaz. [Application] denetleyicisi, [init] yönteminde bu dosyayı kullanarak [service] katmanını örneklendirecektir. Denetleyicinin [init] yönteminin önceki sürümünü hatırlayalım:
- satırda, [service] katmanının uygulama sınıfını ve 12. satırda ise [dao] katmanının uygulama sınıfını açıkça belirtmek zorunda kalmıştık. Spring IoC ile [init] yöntemi şu şekilde olur:
- 7. satır: [service] özel alanı artık [ServiceImpl] türünde değil, [IService] ve c.a.d türündedir. [service] katman arayüzü türündedir. Dolayısıyla, [web] katmanı artık bu arayüzün belirli bir uygulamasına bağlı değildir.
- 14. satır: [service] alanının [spring-config.xml] yapılandırma dosyasından başlatılması.
Yapılması gereken değişiklikler sadece bunlardır. Bu yeni uygulamayı Tomcat'e entegre edelim, Tomcat'i başlatıp [http://localhost:8080/personnes-02] URL'sini çağıralım:

16.2. Web uygulamasının arşivlenmesi
3 katmanlı bir uygulama için bir Eclipse / Tomcat projesi geliştirdik:
![]() |
Gelecek bir sürümde, kişi grubu bir veritabanı tablosuna yerleştirilecek.
- Bu durum, [dao] katmanının yeniden yazılmasını gerektirecektir. Bu durum kolayca anlaşılabilir.
- [service] katmanı da değiştirilecektir. Şu anda bu katmanın tek işlevi, [dao] katmanı tarafından yönetilen verilere senkronize erişim sağlamaktır. Bu amaçla, [service] katmanındaki tüm yöntemleri senkronize ettik. Bu senkronizasyonun neden [dao] katmanında değil de bu katmanda yer aldığını daha önce açıklamıştık. Yeni sürümde, [service] katmanının yine tek işlevi erişim senkronizasyonu olacak, ancak bu senkronizasyon Java yöntemlerinin senkronizasyonu yerine veritabanı işlemleri yoluyla sağlanacaktır.
- [web] katmanı ise değişmeden kalacaktır.
Bir sürümden diğerine geçişi kolaylaştırmak amacıyla, önceki [mvc-personnes-02] projesinin bir kopyası olan yeni bir Eclipse projesi [mvc-personnes-02B] oluşturuyoruz; ancak bu projede [web, service, dao, entites] katmanları .jar arşivlerine yerleştirilmiştir:
![]() |
[src] klasörü artık yalnızca [spring-config.xml] adlı Spring yapılandırma dosyasını içermektedir. Daha önce bu klasörde Java sınıflarının kaynak kodu da bulunuyordu. Bu öğeler kaldırılmış ve yerlerine [personnes-*.jar] arşivlerine yerleştirilen derlenmiş sürümleri geçmiştir; bunlar [1]'te gösterilmiştir:
![]() |
[mvc-personnes-02B] projesi, [personnes-*.jar ] arşivlerini ClassPath dosyasına dahil edecek şekilde yapılandırılmıştır.
[mvc-personnes-02B] web projesini Tomcat ortamında devreye alıyoruz:
![]() | ![]() |
Projeyi test etmek için Tomcat'i başlatıp [http://localhost:8080/personnes02B] URL'sini çağırıyoruz:

Okuyucunun ek testler yapması önerilir.
Veritabanlı sürümde, [service] ve [dao] katmanlarını değiştireceğiz. Böylece, uygulamamızın artık bir veritabanıyla çalışabilmesi için önceki projede [personnes-dao.jar] ve [personnes-service.jar] arşivlerini yeni arşivlerle değiştirmemizin yeterli olacağını göstermek istiyoruz. [web] ve [entites] katmanlarındaki dosyalara dokunmamız gerekmeyecektir.







