Korzystanie z MVC w aplikacji Java

10

Muszę napisać wieloplatformową aplikację GUI do przetwarzania (w wielu wątkach) i wizualizować dość duże ilości danych. Idealnie aplikacja powinna być stosunkowo szybka i dobrze wyglądać.

Interfejs aplikacji będzie się składał z widżetu tabeli, widżetu drzewa i niestandardowego widżetu do rysowania figur. Użytkownik będzie mógł modyfikować dane z dowolnego z tych widżetów, a zmiany powinny zostać natychmiast odzwierciedlone w innych widżetach.

Oczywiście planuję użyć MVC. Jednak zwykle wykonuję całe moje programowanie GUI w C ++ / Qt i mam bardzo ograniczoną ekspozycję na Javę. Byłbym więc bardzo wdzięczny za wszelkie porady dotyczące organizacji takiej aplikacji w Javie. W szczególności, czy powinienem używać Swinga czy JavaFX? Jakie widżety wybrałbyś do pracy? Czy możesz polecić jakieś książki / samouczki online, które obejmują te aspekty platformy Java?

Będę bardzo wdzięczny za wszelkie opinie. Dzięki!

(to pytanie zostało pierwotnie opublikowane w serwisie Przepełnienie stosu , ale ta witryna została zaproponowana jako bardziej odpowiednie miejsce do zadawania pytań)

egor
źródło

Odpowiedzi:

21

Wszystko to jest bardzo subiektywne, ponieważ wiele różnych technologii będzie w stanie zaspokoić Twoje potrzeby.

Podobnie jak inni, prawdopodobnie po prostu polecę technologię, którą osobiście wolę dla takiego projektu, jaką jest JavaFX .

Powody, dla których polecam JavaFX, to:

OK, myślę, że powyższe jest trochę styczne, ale lubię promować JavaFX ;-)

W każdym razie, aby odnieść się do konkretnych punktów pytania:

  • JavaFX to wieloplatformowy framework GUI (obecnie Mac / Windows / Linux).
  • JavaFX ma wbudowaną, wysokiej jakości obsługę wielu wątków (sama podstawowa struktura jest jednowątkowa, podobnie jak prawie każda inna platforma GUI, ale możesz zdefiniować własne zadania, które będą wykonywane równolegle poza wątkiem GUI, dzięki czemu wątek GUI pozostanie czuły).
  • Dobrze napisany program JavaFX nie powinien mieć problemów z wydajnością wystarczającą do wizualizacji dość dużych ilości danych. Oto przykładowy projekt JavaFX, który to robi.
  • Możliwość stylizowania aplikacji za pomocą css, korzystania z efektów wizualnych i animacji, pozwala współpracować z projektantami, aby Twoja aplikacja wyglądała świetnie lub zrób to sam, jeśli masz odpowiednie umiejętności.
  • JavaFX ma TableView i TreeView, których możesz użyć. Istnieje również połączona kontrola TreeTable, która została opracowana w ramach przygotowań do wydania Java 8 .
  • W niestandardowym widgecie do rysowania figur można zastosować kształty wykresów scen lub płótno do bezpośredniego rysowania - tak naprawdę to tylko kwestia stylu kodowania i preferencji.
  • Właściwości i powiązania JavaFX w połączeniu ze strukturami detektora zdarzeń sprawiają, że modyfikowanie danych za pomocą jednego elementu sterującego jest banalne, a zmiany natychmiast odzwierciedlane w innych elementach sterujących.
  • W przypadku projektowania w stylu MVC możesz napisać model przy użyciu zwykłych obiektów java, zdefiniować widok za pomocą języka znaczników FXML (utworzonego za pomocą narzędzia do projektowania graficznego SceneBuilder, jeśli jest to pożądane) i zdefiniować logikę sterowania w języku Java (lub innym języku skryptowym, jeśli wolisz) , a także powinieneś oddzielić swój styl od logiki za pomocą CSS.
  • Ponieważ masz ograniczoną ekspozycję na Javę, krzywa uczenia się będzie znacząca. Oprócz samouczków JavaFX, do których wcześniej podłączyłem, istnieją doskonałe samouczki Java, które mogą w tym pomóc. Podstawowy kod JavaFX korzysta tylko z funkcji dostępnych w JDK, więc aby korzystać z JavaFX, nie musisz uczyć się wielu dodatkowych bibliotek i struktur (tak jak na przykład, jeśli uczysz się JavaEE). Tak więc te dwa miejsca w Tuotorial dostarczają większości informacji, których potrzebujesz, aby przyspieszyć.
  • W przypadku organizacji aplikacji, jeśli masz złożoną aplikację i potrzebujesz kopii zapasowej kompletnego, sprawdzonego środowiska aplikacji klienckiej i nie masz nic przeciwko robieniu dodatkowej nauki, możesz osadzić JavaFX w Eclipse RCP lub NetBeans RCP , które zgodnie z na ich stronach może zaoszczędzić lata czasu programowania. Radziłbym jednak spojrzeć na takie platformy tylko wtedy, gdy uzasadniają to Twoje potrzeby, ponieważ w przypadku małych i średnich projektów prawdopodobnie łatwiej będzie kodować te rzeczy bezpośrednio w JavaFX bez złożonych platform platform klienckich, takich jak Eclipse i NetBeans.
  • Jeśli chodzi o to, czy powinieneś użyć Swinga czy JavaFX, nie jestem tak naprawdę najbardziej obiektywną osobą, aby na to odpowiedzieć. JavaFX zdecydowanie ma niedociągnięcia, które staną się widoczne, gdy zaczniesz go używać (podobnie jak Swing).
  • W przypadku samouczków online zamieściłem linki do najbardziej odpowiednich. Jest ładny zestaw samouczków dla kompletnej aplikacji .
  • Książki Pro JavaFX 2 i JavaFX 2.0 Wprowadzenie przez przykład są wysoko oceniane.
jewelsea
źródło
Dziękuję za tę niesamowitą odpowiedź! JavaFX z pewnością brzmi jak słodka platforma i na pewno zainwestuję w nią dużo czasu. Dodatkowo obie książki, które poleciłeś, są dostępne w mojej bibliotece :)
np.
1
Ten link „najlepsze IDE na świecie” naprawdę powinien po prostu wskazywać na IntelliJ IDEA;) Świetna odpowiedź, bardzo pouczająca, dzięki!
Cooper
1
Należy zauważyć, że JavaFX obecnie nie ma żadnej obsługi ułatwień dostępu. Dla niektórych może to być przełom (to było dla mnie) i będzie musiał nadal używać Swinga.
Cooper
JavaFX zapewnia teraz obsługę ułatwień dostępu. Ta funkcjonalność została dostarczona w Javie 8u40, dla której wdrożono JEP 204: JavaFX Accessibility .
jewelsea
5

Idź z wzorca Model-View-prezenter zamiast. Możesz zobaczyć dobry przykład MVP w Swing tutaj poprzez projekt mvp4j .

Nie będąc Swingiem, sprawdziłbym także artykuły MVP na stronie GWT Google Developers, aby uzyskać więcej informacji na temat tego wzorca i sposobu jego zastosowania w Javie; te same zasady projektowania stoją niezależnie od ramy, a GWT jest bardzo podobny do Swing.

Szybki przegląd działania MVP:

  • Widok : klasa ściśle zawierająca komponenty GUI. Brak świadomości logiki lub modelu, nawet programów obsługi zdarzeń. To sprawia, że ​​widoki są bardzo głupie, a jednocześnie bardzo jednorazowe i zmienne.
  • Prezenter : klasa, która obsługuje logikę aplikacji. Prezenter wiąże się z jedną (lub więcej) klasami widoków i obsługuje całą niezbędną logikę aplikacji i kontrolę modelu.
  • Model : Twoje obiekty modelu danych. Najlepiej jest zachować jak najbardziej POJO (zwykłe stare obiekty Java).

Po prawidłowym wdrożeniu MVP sprawi, że twoja aplikacja będzie bardzo oddzielona i pozwoli ci na modyfikacje bez zakłócania innych obszarów twojej aplikacji.

Edycja: W oparciu o twoją decyzję o użyciu JavaFX, polecam sprawdzenie następujących artykułów

Bednarz
źródło
Dziękuję Ci! Myślę, że zdecydowałem się na JavaFX, ale przeczytam o MVP i tym, jak można go używać z tą platformą.
egor
1
Świetny! Jeśli zdecydujesz się użyć wzorca MVP, oto link, który zawiera przykład w JavaFX code.google.com/p/pennychecker-presenter/wiki/JavaFxMvpExample
Cooper
2

Wymagane widżety można znaleźć zarówno w Swing, jak i SWT . Dokumentacja zawiera przykłady komponentów (Swing) lub widżetów (SWT), więc ich identyfikacja będzie dość łatwa.

Swing to biblioteka GUI zawarta w JDK i zbudowana od podstaw. SWT jest zewnętrznym, a komponenty są oparte na natywnych.

Jeśli chodzi o MVC, oba mają wsparcie dla niego. W Swing masz model dla każdego komponentu, który praktycznie zapewnia podstawowe dane. Sam komponent to zarówno widok, jak i kontroler.

Adrian Ber
źródło