konto usunięte

Temat: Java, architektura aplikacji MVC + GUI + baza danych

Witajcie, piszę aplikacje do zarządzania magazynem (to mój pierwszy większy program w Javie). Zastanawiam się jak to porządnie rozplanować.
Tabele: ZAMOWIENIA FIRMY KATEGORIE PRODUKTY KLIENCI

Po włączeniu programu użytkownik będzie miał do wyboru duże przyciski na środku ekranu:

- Przeglądaj zamówienia

- Dodaj kategorie

- Dodaj firmę

- Produkty

- Klienci

(potem te opcje będą na pasku u góry)

no i analogicznie do nazw przycisków będą realizowane poszczególne funkcje. Dane będę przedstawiał w tabeli i po kliknięciu w rekord będziemy mieli możliwość edycji ( tak to widzę ), checkboxy - masowe usunięcie, w sumie to te funkcjonalności będą się powielały przy każdej opcji.

Całą aplikację chce oprzeć o wzorzec MVC, ale nie wiem jeszcze jak to dokładnie podzielić.

-Do mapowania chce wykorzystać JPA

-Wzorzec Singleton będzie obsługiwał połączenie bazy danych

-Wzorzec Strategia będzie obsługiwał nawigacje (przeglądaj zamówienia, dodaj kategorie itp)

Zastanawiam się teraz właśnie jak odizolować warstwę prezentacji (tabele, przyciski itp) od warstwy bazy danych, nie widzę tego, może dlatego, że nie realizowałem nigdy takiego przykładu. Do przełączania widoków chce wykorzystać CardLayout. Zastanawiam się jakich wzorców tu jeszcze użyć i jak to bardziej rozplanować.
Robert Gruberski

Robert Gruberski Pragmatyczny
Pasjonat
Programowania

Temat: Java, architektura aplikacji MVC + GUI + baza danych

Opisywana aplikacja to J2SE czy J2EE? Po opisie domyślam się że SE, opiszę więc jak zrealizowałem to w podobnej aplikacji którą miałem okazję popełnić.

Widok został zrealizowany z wykorzystaniem Apache Pivot (https://pivot.apache.org/), pozwoliło to na przeniesienie warstwy widoku poza kod Java. Całość widoku jest definiowana w pliku XML.

Dla każdego widoku tworzony jest komponent który pełni rolę kontrolera i odpowiada za wszystko co dzieję się w interfejsie użytkownika (http://pivot.apache.org/tutorials/stock-tracker.ui.html).

Kontroler korzysta z logiki biznesowej zawartej w serwisach oraz DAO. Baza danych jest mapowana na encje poprzez JPA/Hibernate.

Wszystko powyższe zostało połączone z wykorzystanie Google Guice (https://code.google.com/a/apache-extras.org/p/pivot-con...

Mam nadzieję że powyższe chociaż trochę rozjaśni podejście, podobną konstrukcję można zastosować przy wykorzystaniu Swinga. Pisz jeżeli będziesz miał jeszcze jakieś pytania.Ten post został edytowany przez Autora dnia 18.07.14 o godzinie 11:01

konto usunięte

Temat: Java, architektura aplikacji MVC + GUI + baza danych

Ok, dzięki za odpowiedź. Co to technologii to SE. To moja pierwsza aplikacja w Javie, nie będę wykorzystywał dodatkowych technologii typu Apache Pivot (nie wyrobie się z czasem). Wstępny szkielet Model, Widok, Kontroler już mam. Dostęp do pól w tabeli z bazy danych otrzymuje razem z zastosowaniem wzorca DAO (JPA, na razie odpuściłem, robię niskopoziomowo). I teraz mój kolejny problem: zmiana contentu okna w zależności od klikniętego przycisku. Teraz będę robił w widoku 4 buttony ( edycja kategorii, lista klientów, lista produktów, firmy). Po naciśnięciu danego przycisku zmienia się cały content w oknie. I zastanawiam się jak to sprawie rozwiązać czytałem o takim wzorcu DAO Factory. Jako layout chciałem wykorzystać CardLayout o czy już wspominałem.
Robert Gruberski

Robert Gruberski Pragmatyczny
Pasjonat
Programowania

Temat: Java, architektura aplikacji MVC + GUI + baza danych

Chyba najłatwiej będzie Ci to osiągnąć dodając na początku wszystkie widoki do CardLayout, a następnie przełączać się mi między nimi za pomocą CardLayout.show w metodach obsługujących buttony.

Może nie do końca eleganckie rozwiązanie ale na pewno zadziała.
Paweł Bury

Paweł Bury Technology and
Research Development
Manager

Temat: Java, architektura aplikacji MVC + GUI + baza danych

hej,
w SE za duzo nie programuje dlatego widok odloze na bok, jednak jesli chodzi o dostep do bazy to jednak proponowalbym wykorzystac JPA i JTA. daje to sporo zalet - np transakcyjnosc i elegancki ORM. jesli nie chcesz korzystac z dodatkowych technologii do widoku to zastanow sie czy w backendzie nie wykorzystac np Springa, ktory swietnie wspolpracuje z JPA i JTA i daje ci wstrzykiwanie i kontole nad tworzonymi beanami za darmo.

a moze warto to zrobic webowo - swietnie ogarniete widoki(HTML i CSS). do tego jakis kontener embeded?

konto usunięte

Temat: Java, architektura aplikacji MVC + GUI + baza danych

Pawle, a po co do takiej aplikacji proponujesz JTA (rozproszone transakcje) ?
Paweł Bury

Paweł Bury Technology and
Research Development
Manager

Temat: Java, architektura aplikacji MVC + GUI + baza danych

niekoniecznie rozproszone:) generalnie fajnie jak nie trzeba sie martwic o transakcje.. przynajmniej takie jest moje zdanie. a w aplikacji biznesowej kiedy pojawia sie pewnie serwisy wykonujace zlozona logike(jakas fasada np) dobrzeby bylo zeby framework dbal o cofniecie transakcji w odpowiedniej - wymyslonej przez developera - sytuacji

konto usunięte

Temat: Java, architektura aplikacji MVC + GUI + baza danych

Ale skoro już proponujesz Spring'a to proponowanie JTA jest pomyłką. Zwykły Transaction Manager ze Spring'a w połączeniu z JPA będzie dużo lepszym rozwiązaniem niż nawet próba podejścia do tematu JTA, szczególnie dla osoby, która nawet nie wie dobrze od czego zacząć :)

Temat: Java, architektura aplikacji MVC + GUI + baza danych

Jeżeli rozwiązanie z webowym fron-endem wchodzi w grę, proponowałbym Grails.
Jak by się człowiek sprężył, to aplikację można w 40 linijkach zrobić :-)

https://grails.org/
Paweł Bury

Paweł Bury Technology and
Research Development
Manager

Temat: Java, architektura aplikacji MVC + GUI + baza danych

okej zgadzam sie z transaction managerem. mowiac o JTA chodzilo mi o gotowa implementacje ktora zadba za developera o obsluge transakcji.

konto usunięte

Temat: Java, architektura aplikacji MVC + GUI + baza danych

Ok, udało mi się skleić MVC w całość, nie korzystam ze springa itp. Do nawigacji jak już wspomniałem używam CardListenera mam 4 karty gdzie w każdej z nich są pobierane dane z bazy, chce je potem edytować. Zastanawiam się czy na każdą kartę nałożyć osobny wątek? Jeżeli tak to jak. Oraz czy wczytywanie danych w kartach nie obsłużyć jakimś mouse listenerem bo póki co wszystko od razu wczytuje.
Irek Słonina

Irek Słonina programowanie, bazy
danych i linuksy

Temat: Java, architektura aplikacji MVC + GUI + baza danych

Łukasz O.:
Ok, udało mi się skleić MVC w całość, nie korzystam ze springa itp. Do nawigacji jak już wspomniałem używam CardListenera mam 4 karty gdzie w każdej z nich są pobierane dane z bazy, chce je potem edytować. Zastanawiam się czy na każdą kartę nałożyć osobny wątek? Jeżeli tak to jak. Oraz czy wczytywanie danych w kartach nie obsłużyć jakimś mouse listenerem bo póki co wszystko od razu wczytuje.

Nie zmieniaj nic w GUI z poziomu wątku, to powoduje tylko kłopoty. Modyfikacja GUI tylko z głównego wątku.
Jeśli nie chcesz blokować GUI podczas oczekiwania operacji na jednej z kart, włóż długo wykonującą się operację w SwingWorkera.

konto usunięte

Temat: Java, architektura aplikacji MVC + GUI + baza danych

Okej. Mam jeszcze dwa pytania. W widoku mam button do usuwania rekordu który się i teraz czy metoda buttona powinna wywoływać metodę z modelu odpowiedzialną za usuwanie czy metodę z kontrolera? Co do kart to chciałbym aby po kliknięciu w daną kartę wywoływała się funkcja która ją obsługuje ( jakiś mouse listener ) bo póki co wszystko ładuje od razu.

Następna dyskusja:

Birt,eclipse,java - bezpie...




Wyślij zaproszenie do