Как избежать пустого создания пользовательских классов? - PullRequest
0 голосов
/ 28 марта 2019

Я делаю шахматную программу и пытаюсь оптимизировать свой код, в котором у меня есть абстрактный базовый класс ChessPiece, который имеет базовые свойства Board, Color и StartPosition.Теперь в этом конструкторе базового класса я добавляю конкретный экземпляр.Вот эта часть:

    // ChessPiece.cs
    protected ChessPiece(Square startPosition, PieceColor color, Board board)
    {
        this.StartPosition = startPosition;
        this.CurrentPosition = startPosition;
        this.Color = color;
        this.Board = board;
        this.Board[startPosition] = this;
        // ↑
        // I add the pieces inside the indexer assignment (e.g. pieces.Add(piece)...)
    }

Вот как я добавляю фигуры в классе Board:

    //  Board.cs
    public ChessPiece this[Square square]
    {
        get { ... }
        set
        {
            //  simplified version of how I add pieces
            this._pieces.Add(value);
        }
    }

Теперь я настраиваю свою доску следующим образом:

    // Game.cs
    private void PopulateBoard()
    {
        this.CreateStandardPieces(PieceColor.White);
        this.CreateStandardPieces(PieceColor.Black);
    }

    private void CreateStandardPieces(PieceColor color)
    {
        //  rook
        new Rook(aSquare, color, this.Board);
        //  more initializations here
    }

Пример экземпляра new Rook(...) выглядит странно для меня, как будто это пустой экземпляр.Принимая во внимание, что на самом деле происходит всякий раз, когда я создаю экземпляр фигуры, она автоматически добавляется на доску, а не выглядит как «пустая копия».

Теперь мой вопрос: как мне улучшить дизайн, чтобы избежать создания экземпляров?выглядеть так?Или этот дизайн принят как хороший дизайн ООП?

РЕДАКТИРОВАТЬ:
добавлен код, как я добавляю куски

1 Ответ

0 голосов
/ 28 марта 2019

Вы можете видеть доску как одну систему, а фигуры на ней как подсистемы. Его странное разделение интересов и связи позволяет подсистеме узнать о родительской системе и даже изменить ее состояние.

Более чистый способ, по моему мнению, состоит в том, что доска добавляет куски (или систему над доской).

Читать на Separations of concerns и High cohesion – Low coupling

edit: фигура должна содержать только информацию о том, как она может двигаться на доске. Это до доски или системы над доской, чтобы фактически переместить ее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...