2016-03-24 8 views
4

チェス盤アプリケーションに単一責任原理を適用すると、Pieceインターフェイス/クラスはどのような責任を負いますか?単一の責任原則 - チェス盤ピース

私はそれがその色、種類、有効な動きを知る必要があると確信しています。しかし、ボード上の位置(x/y)も知っていなければなりませんか?または、ボードが各部分の位置を知っているかどうか。

この決定はまた、ボードが有効な動きはあなたがPieceOnBoard別のエンティティにしたいかもしれないと思うことが正しいピースなど

+2

Eric Lippertのこのシリーズに興味がある可能性があります:http://ericlippert.com/2015/04/27/wizards-and-warriors-part-one/彼は、ゲームのキャラクタのプロパティやメソッドとしてゲームルールをエンコードするパターンを調べ、最終的にそれを不適切なものとして拒否します。例えば、与えられた部分の有効な動きは、*ルール*オブジェクトなどによってオブジェクトモデルで表現されるべきです。 (これにより、あなたのプログラムがChess960または別の[variant](https://en.wikipedia.org/wiki/List_of_chess_variants)を扱うことをより簡単にすることができます)。 – phoog

+0

知識ではなく行動の面で責任を指定できますか?作品がその位置を知っている場合、その位置について知る必要がある動作は何ですか?ボードに似ています。 Btw、あなたはSRPに関するこの非常に良い記事を読んでみたいでしょう:http://blog.8thlight.com/uncle-bob/2014/05/08/SingleReponsibilityPrinciple.html – Kata

答えて

2

何のためにあるのかを決めるん、作品はその中で移動することができます方法についていくつかの結果をもたらしますピースよりも。

これを実行するにはいくつかの方法がありますが、一般的に、特定のチェスゲームに参加している特定のルックから一般にルックに適用される側面を分離したいと考えています。

Pieceを、PieceOnBoadとBoardPositionが与えられた有効な移動を決定するインターフェイスにすることができます。これは、さまざまな種類のチェスピースに固有の実装を持つことができます。 "Rook"のこのクラスの実装は "Rook in General"に対応します。

PieceOnBoardは、Piece、Color、BoardPositionのコンポジットです。 PieceOnBoardの特定のインスタンスは、特定のチェスゲームに参加する特定のルークに対応します。

BoardPositionは単なるPieceOnBoardオブジェクトのコレクションにすぎません。

関連する問題