自分のバージョンのScrabbleを実装しているとしましょう。私は現在、Board
たくさんのを含むクラスを持っていますSquares
。次に、aはaとaSquare
で構成されます。ボーナスの実装は、実際にはScrabbleの通常のボーナスですが、ゲームにスパイスを加えるために、新しいツイストボーナスを追加しようとする可能性があります。ここでの柔軟性が最も重要です。IBonus
Piece
しばらく考えた後、IBonus
実装が機能するためには、全体Board
とその現在の位置を知る必要があるという結論に達しました(で、Board
それがどこにあるかを知っているので、同じ部分にある部分をチェックできますボーナスとして正方形)。これは、基本的に多くの情報を知る必要があるのと同じくらいひどいことになります。
Board
したがって、私の素朴な実装は、 as引数をIBonus.calculate()
メソッドに渡すIBonus.calculate(Board board, Point position)
ことです。
また、循環参照を作成しているようです。それとも私は間違っていますか?
私はこのアプローチが特に好きではないので、他の可能なアプローチを探しています。calculate
具体的なクラスの代わりにインターフェイスを受け入れることができることはわかっていますcalculate(IBoard board)
が、IMOは最初のケースよりも優れているわけではありません。
私は、現在の実装に集中しすぎて、少なくともこの問題の解決策に適合する可能性のあるまったく異なる設計を考えることができないのではないかと心配しています。たぶん、ゲーム全体を再構築して、他の場所にボーナスを置くことができるので、この計算が容易になりますか?多分私はそれらをBoard
?私は確かにそこにこの問題への他のアプローチがあることを願っています!
ありがとう