Java ile masaüstü uygulaması geliştirirken MVC paterni nasıl uygulanabilir? Örnek verebilir misiniz?

soruldu: 27 Haz '12, 13:54

querman's gravatar image

querman
391162028
cevap kabul oranı: 0%

değiştirildi: 27 Haz '12, 13:58

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183


Java Desktop uygulamalarinda genelde awt / swing yapisindan dolayi MVC kullanimi yaygindir. Son zamanlarda da MVP(Model View Presenter) takim olarak gelistirmeyi, test sureclerini kolaylastirdigi icin tercih edilmeye baslandi. MVP JavaFX 2.x'de daha populer bu aralar. Yine de MVC ve MVP hakkindaki detayli aciklamalara bakmanizi tavsiye ederim.

MVC kullanimi swing de cok kolay.

Model: POJO model classlar olabildigi gibi entity bean'leri de kullanabilirsiniz.

View: Bu bolumde sadece UI islemleri yapilmakla birlikte desktop projelerinde bazen UI icinde mecburen is mantigi kodlamalari da olabilmektedir.

Controller: Butun yonetim isleri burdan yapilir. Deyim yerindeyse yoneticidir model, view varsa dao'lari yonetir.

MVC hakkinda uzun uzun anlatimlar var, bir ornek verirsek, bir ogrenci tanitimi icin soyle bir yapi olabilir:

Ogrenci paket yapisi

  • model paketi: Ogrenci.java (JPA/Hibernate entity kullanimi daha pratik)

  • view paketi: OgrenciListesi.java - (JFrame uzerinde ogrencileri JTable ile listeler, yeni, duzenle, kayit sil(new, edit, delete) action'lari olan view.

OgrenciForm.java - yeni ogrenci ve varolan ogrencinin duzenlendigi JDialog form'dur(JDialog yapmaniz ogrenci formunu modal kullanabilirsiniz. Boylece ayni anda bir kayit duzenlemeye izin vermis olursunuz.)

  • controller paketi: OgrenciController.java - controller datayi veritabanindan okur model objelere cevirir (entity beans kullanirsaniz JPA/Hibernate otomatik yapar) ve View'lere gonderir, view katmani verilen datayi gosterir.

  • dao paketi: - (tercihe bagli) OgrenciDAO.java - veritabani baglantisi yapar, jpa/hibernate ile verileri okur. DAO classlari direk view icinden cagrilmazlar, cagrilmamalilar, DAO'lar controller icinden cagrilir! Katmanlar arasi hiyerasi icin bu onemlidir!

DAL(Data Access Layer) katmani notu: Bazi programcilar desktop projelerinde data katmanini controller icinde yaparken bazi programcilar ayri bir DAL katmani yazip veritabanindan verileri DAO(Data Access Object) ile cekmeyi tercih ediyor.

Ayrica proje icinde AppView(programin anamenusu) ve AppController(programi main methunda AppController uzerindenc agrilir!) olmasi, anamenu ve program acildiginda ilk yapilacak islemler ve diger bircok kontroller icin kolay bir yapi sunar.

Ilk bakista MVC pattern MVVM(Model View ViewModel) pattern'e gore daha fazla kodlama yaptiriyor gibi gorunebilir, fakat view ve controller classlarinizi interface ve abstract classlarla tasarlarsaniz benzer yapilan action'lari(yeni kayit ekle, duzenle, sil, kayit goster, kayit sec gibi) generic kodlarsaniz bircok kodlamayi, form ve listeleme view'lerinizi kolaylastirabilirsiniz.

permanent link

cevaplandı: 27 Haz '12, 19:20

CemIkta's gravatar image

CemIkta ♦
19.9k29125190
cevap kabul oranı: 36%

CemIkta hocam süper bir anlatım olmuş.

(28 Haz '12, 02:23) bzkrtmert bzkrtmert's gravatar image

Anlatımınız için teşekkürler.

(28 Haz '12, 11:40) querman querman's gravatar image

+1 Cem Bey çok yalın ve sade anlatım için. Bildiğim kavramları daha yalın halde okumak keyif veriyor ve anlatımsal olarakta kişiyi güçlendiriyor.

(28 Haz '12, 17:45) Turgay Can Turgay%20Can's gravatar image
1

Yukaridaki anlatima uygun JPA, Hibernate, Java Swing, SwingX, Flamingo ve Substance LAF ile bir demo projesi gelistirdim, Java Desktop projeleri ile ilgilenen arkadaslara yardimci olabilir. Proje detaylari: http://www.devsniper.com/customers-java-swing-application-with-source-code/

Kaynak kodlari: https://bitbucket.org/devsniper/customersdesktop

(25 Oca '14, 16:53) CemIkta ♦ CemIkta's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,077
×79
×47

Soruldu: 27 Haz '12, 13:54

Görüntüleme: 2,596 kez

Son güncelleme: 25 Oca '14, 16:53

powered by BitNami OSQA