Adres Defteri Web Uygulaması

Merhaba arkadaşlar.Bu yazımda Özgür Yazılım A.Ş. şirketine yaptığım staj başvurusunda, kabul sürecinde benden istedikleri basit bir web uygulamasını geliştirme sürecinden bahsedeceğim.Aşağıda gelen maili birebir görebilirsiniz.

* Sizi daha iyi değerlendirebilmek için, ufak bir yazılım geliştirmenizi isteyebilir miyiz?
Şirketimize özel bir kod istemiyoruz, Github hesabınız üzerinden yayınlamanızı istiyoruz. İleride referans olarak kullanabilirsiniz. JSF, JPA, Maven teknolojilerini kullanarak basit bir adres defteri web uygulaması geliştirmenizi istiyoruz:

  • Kişi / adres listesi alınabilmeli
  • Ad, Soyad alanlarından arama yapılabilmeli
  • Yeni adres kaydı yapılabilmeli
  • n adet telefon numarası girilebilmeli
  • E-posta adresi girilebilmeli
  • Var olan bir kayıt detayları incelenebilmeli
  • Var olan bir kayıt üzerinde değişiklik yapılabilmeli
  • Var olan bir kayıt silinebilmeli
  • İlgili alanlara hatalı bilgi girilememeli (ör: Ad, Soyad kısmında rakam değeri olmaması)

* Uygulamanın nasıl kurulacağı ve çalışır hale getirileceği ile ilgili markdown ile bir belgeyi yazmanızı istiyoruz.

Gelen mailden sonra web uygulamasını geliştirmeye başladım.Projeyi Eclipse-Neon IDE üzerinden maven projesi olarak geliştirdim.
Şimdi Eclipse'i açıp AdresDefteri adında bir dynamic web project oluşturalım.Projeyi oluştururken dynamic web module 3.0 versionu seçelim ve configuration kısmını JavaServer Faces v2.0 Project yapalım.Proje oluşturulduktan sonra projenin üzerine gelip sağ tık yapıp configure seçeneğinden Convert to Maven Project diyoruz.Daha sonra pom.xml i açıp dependency lerimizi ekleyelim.

Hibernate konfigürasyonu ve util sınıfının yazılması kısımlarını önceki projelerden incelemenizi öneririm.Yazıyı uzatmamak adına bazı kısımları es geçeceğim.

İlk olarak veritabanı tasarımını yaptım.Kişi ve iletişim adında iki tablonun yeterli olacağını düşündüm.Mailde n tane telefon girilebilir dediği için telefon numaralarını iletişim tablosunda ayrı olarak tutmayı düşündüm.Kişi tablosu ile iletişim tablosu arasında one to many ilişkisi kurdum.Bu ilişkiye göre gerekli notasyonları yaptım.Cascade ve fecth kavramını merak edebilirsiniz.@OneToOne notasyonuna cascade=CascadeType.ALL ekleyerek sadece bir nesneyi save() ederek, 2 tabloya da aynı anda veri eklemiş oluruz.Fetch, çekim stratejisini (fetch strategy) yapılandırmaya olanak sunan bir özelliktir.Bir Entity nesnesinin sahip olduğu veriler, veritabanından elde edilirken 2 tip veri çekme stratejisi kullanılmaktadır. Bu tipler;
ihtiyaç halinde yüklemeyi temsil eden LAZY ve anında yüklemeyi temsil eden EAGER‘dir.

Aşağıdaki kodları incelerseniz iletişim tablosuna kişi nesnesini ek kolon olarak ekliyorum.Böylece hangi telefonun kime ait olduğunu tutabiliyorum.Ek bir kolon olarak eklemeseydim hibernate ekstra bir tablo oluşturarak bir üçüncü tabloda bu bilgileri tutacaktı.

Tablolarımızı hazırlağımıza göre veritabanı işlemleri için KisiDAOImpl sınıfını açıp metodlarımızı yazmaya başlayabiliriz.Ben interface lerimizi oluşturdum.Github üzerinden inceleyiniz.

Daha sonra IletisimDAOImpl sınıfını açıp veritabanı işlemleri için metodlarımızı yazmaya başlayabiliriz.

Bu işlemleri yaptıktan sonra managed bean oluşturuyoruz.Managed Bean genel olarak ön yüzde yazdığımız jsf sayfasının iş mantığını içerir.Ayrıca ön yüzde form mantığıyla aldığımız değerleri managed bean içerisinde saklarız.Jsf sayfalarımız ile java sınıflarımız managedbean aracılığıyla haberleşir diye düşünebiliriz.

Arayüz kısmını nasıl oluşturduğumu aşağıdan görebilirsiniz.

Projenin kaynak koduna buraya tıklayarak ulaşabilirisiniz.