Java uygulamasında MVC kullanma


10

(Birden çok iş parçacığı) işlemek ve oldukça büyük miktarlarda veri görselleştirmek için bir platformlar arası GUI uygulaması yazmak gerekir. İdeal olarak uygulama nispeten hızlı olmalı ve iyi görünmelidir.

Uygulamanın arayüzü bir tablo widget'ı, bir ağaç widget'ı ve özel bir şekil çizim widget'ından oluşacaktır. Kullanıcı bu widget'ların herhangi birinden verileri değiştirebilecektir ve değişiklikler derhal diğer widget'lara yansıtılmalıdır.

Doğal olarak, MVC kullanmayı planlıyorum. Ancak, normalde tüm GUI programlama C ++ / Qt yapmak ve Java maruz kalma çok sınırlı. Bu yüzden böyle bir uygulamanın Java'da nasıl düzenleneceği konusunda herhangi bir tavsiyeyi gerçekten takdir ediyorum. Özellikle Swing veya JavaFX kullanmalı mıyım? İş için hangi widget'ları seçersiniz? Java platformunun bu yönlerini kapsayan herhangi bir kitap / çevrimiçi eğitim önerebilir misiniz?

Herhangi bir geri bildirimi çok takdir edeceğim. Teşekkürler!

(bu soru başlangıçta Stack Overflow'da yayınlanmıştır , ancak bu site sormak için daha uygun bir yer olarak önerilmiştir)

Yanıtlar:


21

Birden fazla farklı teknoloji ihtiyaçlarınızı karşılayabileceğinden, bunların hepsi çok özneldir.

Diğerleri gibi, muhtemelen böyle bir proje için kişisel olarak tercih edeceğim teknolojiyi tavsiye edeceğim, bu JavaFX olacaktır .

JavaFX'i tavsiye etmem nedenlerim:

Tamam, sanırım yukarıdaki biraz teğet, ama JavaFX ;-) tanıtmak istiyorum

Her neyse, sorunuzdaki belirli noktaları ele almak için:

  • JavaFX, platformlar arası bir GUI çerçevesidir (şu anda Mac / Windows / Linux).
  • JavaFX, dahili, yüksek kaliteli çoklu iş parçacığı desteğine sahiptir (çekirdek çerçevenin kendisi, diğer tüm GUI platformlarında olduğu gibi tek iş parçacıklıdır, ancak GUI iş parçacığının dışında aynı anda yürütülecek kendi görevlerinizi tanımlayabilirsiniz, böylece GUI iş parçacığı duyarlı).
  • İyi yazılmış bir JavaFX programında, oldukça büyük miktarlardaki verileri görselleştirmek için yeterince iyi performans gösteren hiçbir sorun olmamalıdır. İşte bunu yapan örnek bir JavaFX projesi .
  • Uygulamayı css ile şekillendirme, görsel efektler ve animasyondan yararlanma, uygulamanızın harika görünmesini sağlamak veya tasarımcılarınızla becerileriniz varsa kendiniz yapmanıza olanak tanır .
  • JavaFX'te kullanabileceğiniz bir TableView ve bir TreeView vardır . Java 8 sürümüne hazırlık için geliştirilmiş bir TreeTable kontrolü de vardır .
  • Özel şekil çizim widget'ı sahne grafiği şekillerini veya doğrudan çizim tuvalini kullanabilir - bu sadece bir kodlama stili ve tercihi meselesidir.
  • JavaFX'in özellikleri ve bağlayıcı özellikleri, olay dinleyicisi çerçeveleriyle birleştiğinde, bir denetimi kullanarak verilerin değiştirilmesini ve değişikliklerin diğer denetimlere hemen yansıtılmasını önemsiz hale getirir.
  • MVC stili geliştirme için modelinizi düz java nesneleri kullanarak yazabilir, FXML biçimlendirme dilini (isterseniz SceneBuilder grafik düzen aracını kullanarak oluşturulur) kullanarak görünümünüzü tanımlayabilir ve Java'da (veya isterseniz başka bir komut dosyası dili) kontrol mantığınızı tanımlayabilirsiniz Ayrıca CSS kullanarak stilinizi mantığınızdan ayırmalısınız.
  • Java'ya sınırlı maruz kaldığınız için, öğrenme eğrisi önemli olacaktır. Daha önce bağlandığım JavaFX eğiticilerine ek olarak bu konuda yardımcı olabilecek mükemmel Java eğitimleri var . JavaFX çekirdek kodu yalnızca JDK'da bulunan tesisleri kullanır, bu nedenle JavaFX'i kullanmak için çok fazla ek kitaplık ve çerçeve öğrenmeniz gerekmez (örneğin JavaEE öğreniyormuşsunuz gibi). Bu iki ders sitesi, hıza ulaşmak için ihtiyacınız olan çoğu bilgiyi sağlar.
  • Eğer karmaşık bir uygulama varsa ve uygulama organizasyonu için komple, kanıtlanmış istemci uygulama çerçevesinin desteğine ihtiyaçları ve ekstra öğrenme çok yapıyor sakıncası, o zaman içinde JavaFX gömebilirsiniz Eclipse RCP veya NetBeans RCP , uygun sayfalarına gelmeniz size yıllarca zaman kazandırabilir. Bu tür platformlara yalnızca ihtiyaçlarınız haklı çıkarsa bakmanızı tavsiye ederim, çünkü küçük ve orta ölçekli projeler için, Eclipse ve NetBeans gibi karmaşık istemci platformu çerçeveleri olmadan doğrudan JavaFX'te işleri kodlamak daha kolay olacaktır.
  • Swing veya JavaFX kullanmanız gerekip gerekmediğine gelince, buna cevap verecek en nesnel kişi değilim. JavaFX'in, kullanmaya başladığınızda (Swing gibi) kesinlikle anlaşılacak eksiklikleri vardır.
  • Çevrimiçi öğreticiler için en alakalı olanlarla bağlantı kurdum. Bir Orada tam bir uygulama için öğretici güzel seti .
  • Örnek olarak Pro JavaFX 2 ve JavaFX 2.0 Tanıtım kitapları büyük ölçüde derecelendirilmiştir.

Bu harika cevap için teşekkürler! JavaFX kesinlikle tatlı bir platform gibi geliyor ve kesinlikle buna çok zaman harcayacağım. Ayrıca tavsiye ettiğiniz her iki kitap da kütüphanemde yer alıyor :)
egor

1
Bu "dünyanın en iyi IDE" bağlantı gerçekten sadece IntelliJ IDEA işaret gerekir;) Büyük cevap, çok bilgilendirici, teşekkürler!
Cooper

1
JavaFX'in şu anda herhangi bir erişilebilirlik desteği olmadığı unutulmamalıdır. Bu bazıları için bir anlaşma kırıcı olabilir (benim için) ve Swing'i kullanmaya devam etmek zorunda kalacak.
Cooper

JavaFX artık erişilebilirlik desteği sağlıyor. Bu işlevsellik, JEP 204: JavaFX Erişilebilirliği'nin uygulandığı Java 8u40'ta sunuldu .
jewelsea

5

Bunun yerine bir Model-görünüm-sunum kalıbıyla devam edin . Sen Swing iyi bir MVP örneğini görebilirsiniz burada aracılığı mvp4j projesi.

Swing olmasa da , bu model ve Java'da nasıl uygulanacağı hakkında daha fazla bilgi için GWT Google Developers sitesinde MVP makalelerini de inceleyeceğim ; çerçeve ne olursa olsun aynı tasarım ilkeleri duruyor ve GWT Swing'e çok benziyor.

MVP'nin nasıl çalıştığına dair hızlı bir döküm:

  • Görünüm : Kesinlikle GUI bileşenlerinizi içeren bir sınıf. Olay işleyicileri bile mantık veya model farkındalığı yok. Bu, görünümleri çok aptal, ancak çok tek kullanımlık ve değiştirilebilir hale getirir.
  • Presenter : Uygulama mantığınızı işleyen bir sınıf. Bir sunucu bir (veya daha fazla) görünüm sınıfına bağlanacak ve gerekli tüm uygulama mantığı ve model kontrolünü işleyecektir.
  • Model : Veri modeli nesneleriniz. Bunları mümkün olduğunca POJO benzeri (düz eski java nesneleri) olarak tutmak en iyisidir.

Doğru uygulandığında, MVP uygulamanızı çok ayrıştırır ve uygulamanızın diğer alanlarını rahatsız etmeden değişiklikler yapmanızı sağlar.

Düzenleme: JavaFX kullanma kararınıza bağlı olarak, aşağıdaki makalelere göz atmanızı tavsiye ederim


Teşekkür ederim! JavaFX ile çalışmaya karar verdim, ancak MVP ve bu platformla nasıl kullanılabileceğini okuyacağım.
egor

1
Harika! MVP kalıbını kullanmaya karar verirseniz, JavaFX code.google.com/p/pennychecker-presenter/wiki/JavaFxMvpExample
Cooper

2

Eğer gerektiren widget'ları hem bulunabilir Salıncak veya SWT . Belgeler, bileşenlerin (Swing) veya widget'ların (SWT) örneklerini içerir, bu nedenle bunları tanımlamak oldukça kolaydır.

Swing, JDK'da bulunan ve sıfırdan oluşturulmuş GUI kütüphanesidir. SWT harici bir bileşendir ve bileşenler yerel olanları temel alır.

MVC'ye gelince, her ikisinin de desteği var. Swing'de, her bir bileşen için pratikte temel verileri sağlayan bir Modeliniz vardır. Bileşenin kendisi hem Görünüm hem de Denetleyicidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.