Допустим, я внедряю свою собственную версию Scrabble.В настоящее время у меня есть класс Board
, который содержит много Squares
.A Square
в свою очередь состоит из IBonus
и Piece
.Реализация бонусов на самом деле является обычным бонусом для Scrabble, но возможно, что я попытаюсь добавить какой-то новый и извращенный бонус, чтобы привнести в игру особую гибкость - гибкость здесь имеет первостепенное значение!
Подумав некоторое время, я пришел к выводу, что для реализации IBonus
им потребуется знать весь Board
, а также его текущую позицию (на Board
, поэтому он знает, где он находитсяи он может проверить на кусок, который находится в той же площади, что и бонус).Это поражает меня так же плохо, как и в основном нужно знать много информации.
Итак, моей наивной реализацией было бы передать Board
в качестве аргумента методу IBonus.calculate()
, IBonus.calculate(Board board, Point position)
, то есть.
Кроме того, похоже, создается циклическая ссылка.Или я не прав?
Мне не нравится этот подход, поэтому я ищу другие возможные подходы.Я знаю, что могу calculate
принять интерфейс вместо конкретного класса, т. Е. calculate(IBoard board)
, но я думаю, что не все так хорошо, как в первом случае.
Боюсь, что я слишком сосредоточен на своемтекущая реализация, чтобы иметь возможность думать о совершенно разных проектах, которые могли бы соответствовать как минимум, а также решения этой проблемы.Может быть, я мог бы перестроить всю игру и получить бонусы в другом месте, чтобы это облегчило этот расчет?Может быть, я слишком сосредоточен на том, чтобы иметь их на Board
?Я, конечно, надеюсь, что есть другие подходы к этой проблеме!
Спасибо