2016-03-24 5 views
4

Wenden Sie das Prinzip der einheitlichen Verantwortung auf eine Schachbrett-Anwendung an, wofür sollte eine Stück-Schnittstelle/Klasse verantwortlich sein?Single Responsibility Prinzip - Schachbrett Stück

Ich bin sicher, dass es seine Farbe, Typ und gültige Bewegungen kennen muss. Aber sollte es auch seine Position (x/y) in der Tafel wissen? Oder sollte das Brett die Position jedes Stückes wissen.

Diese Entscheidung auch einige Auswirkungen auf hat, wie das Stück, dass bewegen kann, hat der Vorstand zu entscheiden, was eine gültige Bewegung für ein Stück etc ist

+2

Sie könnten sich für diese Reihe von Eric Lippert interessieren: http://ericlippert.com/2015/04/27/wizards-and-warriors-part-one/. Er untersucht das Muster der Kodierung von Spielregeln als Eigenschaften und Methoden von Spielfiguren und lehnt es letztlich als ungeeignet ab. Die gültigen Züge für ein bestimmtes Stück sollten zum Beispiel im Objektmodell durch * Regel * -Objekte oder dergleichen dargestellt werden. (Dies würde es auch viel einfacher machen, Ihr Programm mit Chess960 oder einer anderen [Variante] (https://en.wikipedia.org/wiki/List_of_chess_variants) zu behandeln). – phoog

+0

Können Sie die Verantwortlichkeiten in Bezug auf das Verhalten anstelle von Wissen angeben? Wenn ein Stück seine Position kennt, was ist das Verhalten, das über die Position wissen muss? Ähnlich für das Board. Übrigens möchten Sie vielleicht diesen sehr guten Artikel über SRP lesen: http://blog.8thlight.com/uncle-bob/2014/05/08/SingleReponsibilityPrinciple.html – Kata

Antwort

2

Sie sind richtig denken Sie PieceOnBoard eine andere Entität machen möchten als Stück.

Es gibt ein paar Möglichkeiten, es zu tun - aber im Allgemeinen möchten Sie die Aspekte, die für einen Rook im Allgemeinen gelten, sagen, von einem bestimmten Rook, wie es an einem bestimmten Schachspiel teilnimmt.

Sie könnten Piece zu einer Schnittstelle machen, die gültige Bewegungen bei einem PieceOnBoad und einer BoardPosition bestimmt - es könnte Implementierungen haben, die für die verschiedenen Arten von Schachfiguren spezifisch sind. Die Implementierung dieser Klasse für "Rook" würde "Rook in General" entsprechen.

Ein PieceOnBoard wäre eine Zusammensetzung aus einem Stück, einer Farbe und einer BoardPosition. Eine bestimmte Instanz von PieceOnBoard würde einem bestimmten Turm entsprechen, der an einem bestimmten Schachspiel teilnimmt.

Dann könnte eine BoardPosition lediglich eine Sammlung von PieceOnBoard-Objekten sein.

Verwandte Themen