Skip to content

STRUCTUUR APPLICATIE CHEAT SHEET (WILL BE UPDATED AS WE GO) #28

@InteNs

Description

@InteNs

Structuur

views

je view heeft alle layout in een GameListView.fxml bestand in het mapje views/layout

Deze fxml moet een java class hebben als controller GameListView.java in het mapje views

fx:controller="views.GameListView"

deze GameListView class

  • heeft toegang tot de MainView via parent
  • mag een controlller hebben en daarmee dus een onderwerp
    • andere controllers mogen wel benaderd worden voor listeners
  • heeft een session die de ingelogde user bevat
  • heeft toegang tot controllers die gedefinieerd zijn in de superclasse(View)
  • alle methodes die direct vanuit FXML worden aangeroepen moeten de @FXML annotatie hebben
  • alle variabelen die direct vanuit FXML komen moeten de @FXML annotatie hebben
public class GameListView extends View {
    @Override
    public void refresh() {
        //dit word aangeroepen zodra de view tevoorschijn komt
    }
    @Override
    public void constructor() {
        //dit wordt aangeroepen zodra de applicatie gestart wordt
    }
}

nu moet je je view toevoegen aan de main view:

  • in de MainView.fxml :
<TabPane fx:id="control">
    <fx:include fx:id="gameListView" source="GameListView.fxml"/>
</TabPane>

of:

<StackPane fx:id="content" VBox.vgrow="ALWAYS">
    <fx:include fx:id="loginView" source="LoginView.fxml"/>
</StackPane>
  • in de bijbehorende java class MainView :
// de java classe die de controller is van jouw fxml
@FXML private GameListView gameListViewController;
//het eerste object in de fxml van jouw view
@FXML private Tab GameListView; 

let op, zet altijd alleen @FXML voor je variablen of methodes als deze puur door FXML gebruikt wordt, niet voor normale variablen

  • in de initialize() methode van main staat een lijst waar je je ViewController aan toevoegd zodat deze zijn parent krijgt, en zodat de constructor methode wordt aangeroepen
    • de currentUser is altijd gezet voordat je contstructor word aangeroepen.
  • om vanuit je view een tabje te laten zien doe je parent.setTab(parent.gameListView);
  • om vanuit je view een andere view te laten zien doe je parent.setContent(parent.loginView);

controllers

  • heeft een (observable) array met zijn "onderwerp"
  • heeft een refresh methode om de array opnieuw uit de database te vullen
  • heeft database access d.m.v. bijvoorbeeld de gameDAO
  • heeft getters voor de andere controllers
  • heeft een getSession() methode voor de huidig ingelogde user
  • moet geregistreerd worden in classe ControllerFactory
public class GameController extends Controller {

    private ObservableList<Game> games;

    public GameController(ControllerFactory factory) {
        super(factory);
        games.setAll(gameDAO.selectGames());
    }

    public ObservableList<Game> getGames() {
        return games;
    }

    public void refresh() {
        games.setAll(gameDAO.selectGames());
    }
}

Domain Classes (models)

heeft alleen info over zichzelf, en geen connectie(of enig inzicht) met database(alles via controller)

Database Access Object (DAO)

  • let op, sinds #69 is deze niet meer static
  • is de vertaal slag tussen onze applicatie en de database
  • weet welke kolomen naar welke waardes moeten( Game constructor weet dit niet! )
  • geeft alleen objecten terug(geen integers, strings of booleans etc)

Enumerations

  • staan in package enumerations
  • heeft methode statische methode parse(String s) die de goede enum waarde returned(voor uitlezen db)
  • mag optioneel een statische format(GameType type) methode heeft die een mooie toString() zou kunnen implementeren

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions