JavaFX MVC - ogólna zasada

1

Witam,

wraz z @Burdzi0 zastanawiamy się jak powinien wyglądać podział klas w grze Sudoku z wykorzystaniem wzorca MVC. Mianowicie nasze "doświadczenia" (o ile można tak w ogóle powiedzieć) rozumieją ten wzorzec inaczej.

Czy controller powinien zawierać główny widok okna?
Czy view to np. pojedynczy Label wyświetlający czas rozwiązywania sudoku
Czy view to np. tablica Button, które odpowiada za widok planszy
Czy Model to np. cała logika np. algorytm sprawdzający rozwiązanie Sudoku, który jest podpięty pod odpowiedniego Button jako akcja?

Pozdrawiam Rafał

0

Czy to jest aplikacja desktopowa? W przypadku desktopa spotkałem się z inną nazwą wzorca (też logika jest oddzielona od layoutu / wizualnej strony, ale jednak jakoś to się inaczej nazywało, nie pamiętam)...

Dołączam do tego pytania, bo też mnie to interesuje!.

JavaFan

0

Jeśli chodzi o oddzielenie logiki od widoku to nie ma tutaj zbytniej różnicy od Javy webowej. Możesz sobie zrobić nawet standardowo:
model, serwisy, konwertery i walidatory i wystawić jakieś x serwisów dla widoku w JavaFX. Do poziomu serwisów może to wyglądać niemal identycznie jak w standardowej javie webowo springowo hibernateowo webowej.

Czy view to np. pojedynczy Label wyświetlający czas rozwiązywania sudoku

Z większymi komercyjnymi aplikacjami w JavaFX nie miałam styczności, ale kiedyś robiłam to sobie tak, że kontroler właśnie trzymał sobie elementy widoku typu
TextField, Label itd... i zarządzał swoim oknem oraz trzymał też referencję do serwisów z których korzystał. Miał też metody podpięte pod dane przyciski i akcje i np. gdy użytkownik coś klikał wywołuje się metoda w kontrolerze, który zmienia na widoku co ma zmienić i/lub wywołuje też akcje na serwisie. Jako ciekawostka to z adnotacją @FXML te podpięte metody mogą być nawet prywatne. Używałam JavaFX w połączeniu z Springiem i miałam tam fabrykę tych kontrolerów, które miały scope prototype i implementowały interfejs z metodą ala setDialog(FXDialog dialog). FXDialog jako zwykła klasa helper, która dziedziczy po Stage i używa FXMLLoader żeby załadować tego JavaFX XMLa, tworzy Scene i wywołuje controller.setDialog(this);. Była też fabryka tych FXDialogów coś na zasadzie:

    @Bean
    @Scope("prototype")
    public FXDialog about() {
        return FXDialog.with()
                .controller(cf.aboutController())
                .fxmlResource("About.fxml")
                .owner(primaryStage)
                .build();
    }

    @Bean
    @Scope("prototype")
    public FXDialog main() {
        return FXDialog.with()
                .controller(cf.mainWindowController())
                .fxmlResource("MainWindow.fxml")
                .owner(primaryStage)
                .build();
    }

a żeby zainicjować z poziomu jakiegoś kontrolera ekran:

 @FXML
    public void showAbout() {
        screens.about().show();
    }

Czy view to np. tablica Button, które odpowiada za widok planszy

Jeju wy teraz kłócicie się zero jedynkowo co uznać za słówko view. Życie nie jest takie zero jedynkowe. View to znaczy widok.
TextInput, Button albo Label to może być część widoku albo mogą czasem stanowić widok sam w sobie. Mapę tych buttonów możesz
sobie oczywiście opakować dodatkową klasą pt PlanszaSudoku i wystawić metody dla kontrolera ułatwiające czyszczenie planszy czy coś tam - możesz też nie opakowywać i w kontrolerze trzymać np. 20pól buttonów. Mniejsza o słówko view, liczy się koncepcja.
Pozdrawiam

0

tak deskoptowa otagowałem to jako JavaFX - rafal20-1988 2016-12-21 20:10

Generalnie JavaFX to desktop, ale były jakieś pomysły, próby żeby też nadawała się dla web i mobile. Przykład: http://www.jpro.io/?page=demos

0

@karolinaa: tu nie chodzi o to że się niby kłócimy czy też nie:) chcemy coś "napisać" nabierając dobrych nawyków:) ja do tej pory tak jak Ty po nie kąt pisałaś cały czas w kontrolerze pisałem całe GUI a same metody do obsługi pisałem w zależności od tego jak aplikacja była rozbudowana albo w klasach prywatnych albo w metodach prywatnych.
Zawsze to robiłem w sposób taki w taki później potrafiłem to ze sobą połączyć:)

0

Ja zazwyczaj robiłem takie 'niby' MVC. Tj. W widoku trzymałem przyciski itd, ale już akcje trzymałem w całkowicie osobnych klasach. Zazwyczaj nazywałem je w stylu FrameListener (jeśli Frame było tylko jedno). Ale już w obu miejscach (widok i listenery) odwoływałem się do modeli, jeśli było konieczne. Ale z chęcią posłucham jakiegoś lepszego rozwiązania. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1