Oddzielenie widoku od logiki

0

Cześć, od niedawna pracuje jako junior java dev i w domu 4 fun coś sobie nadal kodzę. O ile w pracy nie ma takiego problemu bo jednak web wymusza podział na front-end i back-end, to jak to wygląda po stronie prostych aplikacji desktopowych?
Zabrałem się za napisanie gry w szachy. Mam póki co planszę na której mogę wybierać i przesuwać figury. Chciałem jednak dopisać do tego logikę, sprawdzenie czy dany ruch jest poprawny. No i zaczęły się schody - potrzebuje klasy dla pionków po stronie UI

class Pawn extends Piece {
    Pawn(int column, int row, PieceColor color) {
        super(column, row, color);
        this.blackPieceImage = new Image("pieces/black_pawn.png");
        this.whitePieceImage = new Image("pieces/white_pawn.png");
        if(this.color == PieceColor.WHITE){
            this.shape.setFill(new ImagePattern(whitePieceImage));
        } else {
            this.shape.setFill(new ImagePattern(blackPieceImage));
        }
    }
}

Jak i po stronie logiki gry

public class Pawn extends Piece {
    private boolean isFirstMove = true;
    private boolean reachedEnd = false;

    Pawn(int x, int y, PieceColor color){
        super(x, y, color);
    }

    @Override
    public void setPosition(int x, int y) {
        this.isFirstMove = false;
        this.position = new Position(x, y);
    }

    @Override
    public void calculateLegalMoves() {
        legalMoves.clear();
        legalAttackMoves.clear();

        if(color == PieceColor.WHITE) {
            legalMoves.add(new Position(position.getX(), position.getY() + 1));
            if(isFirstMove){                
                legalMoves.add(new Position(position.getX(), position.getY() + 2));
            }
        } else {
            legalMoves.add(new Position(position.getX(), position.getY() - 1));
            if(isFirstMove){                
                legalMoves.add(new Position(position.getX(), position.getY() - 2));
            }
        }

        legalAttackMoves.add(new Position(position.getX() + 1, position.getY() + 1));
        legalAttackMoves.add(new Position(position.getX() - 1, position.getY() - 1));
        legalAttackMoves.add(new Position(position.getX() + 1, position.getY() - 1));
        legalAttackMoves.add(new Position(position.getX() - 1, position.getY() + 1));
    }
}

Zastanawiam się teraz co dalej - pisać logikę która połączy UI z logiką? Czyli coś na wzór controllera pomiędzy? Czy może w tym w miarę prostym przykładzie jakim są szachy, złączyć te klasy w 1, bo tak naprawdę w wielu miejscach powielam tylko kod pisząc w ten sposób. Jak do tego podejść by z czasem móc się takim projektem pochwalić w CV? (w planach jest możliwość gry online poprzez Sockety)

0

Ja bym zrobił osobną klasę a raczej klasy na walidację ruchów

0

Nie umiem sobie wyobrazić, gdzie tu się jakiś kod powieli. Musiałbyś podać przykład. Raczej osobna klasa do logiki (a tak naprawdę interfejs) i tłumaczenie gdzieś po stronie planszy graficznej.

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