Design patterns 单一责任原则-棋盘棋子

Design patterns 单一责任原则-棋盘棋子,design-patterns,chess,single-responsibility-principle,Design Patterns,Chess,Single Responsibility Principle,将单一责任原则应用于棋盘应用程序,工件接口/类应该负责什么 我确信它需要知道它的颜色、类型和有效的动作。但它是否也应该知道自己在董事会中的位置(x/y)?或者,董事会应该知道每一件的位置 这个决定也会对工件如何移动产生一些影响,比如,董事会是否决定工件的有效移动方式等。您认为您可能希望使工件成为不同于工件的实体是正确的 有两种方法可以做到这一点,但通常你需要将适用于一辆车的各个方面分开,比如说,当一辆车参加一场特定的国际象棋比赛时,将其与特定的车分开 您可以使Piece成为一个接口,在给定Pie

将单一责任原则应用于棋盘应用程序,工件接口/类应该负责什么

我确信它需要知道它的颜色、类型和有效的动作。但它是否也应该知道自己在董事会中的位置(x/y)?或者,董事会应该知道每一件的位置


这个决定也会对工件如何移动产生一些影响,比如,董事会是否决定工件的有效移动方式等。您认为您可能希望使工件成为不同于工件的实体是正确的

有两种方法可以做到这一点,但通常你需要将适用于一辆车的各个方面分开,比如说,当一辆车参加一场特定的国际象棋比赛时,将其与特定的车分开

您可以使Piece成为一个接口,在给定PieceOnBoad和BoardPosition的情况下确定有效的移动——它可以具有特定于不同种类棋子的实现。“Rook”类的实现将对应于“rookin-General”

棋盘上的棋子是棋子、颜色和棋盘位置的组合。PieceOnBoard的特定实例将对应于参与特定国际象棋游戏的特定rook


那么BoardPosition可能仅仅是一组板载对象

您可能对Eric Lippert的以下系列感兴趣:。他研究了将游戏规则编码为游戏角色的属性和方法的模式,并最终拒绝将其视为不合适。例如,给定工件的有效移动应该在对象模型中用规则对象等表示。(这也将使您的程序更容易处理棋盘960或其他)。您能否从行为而不是知识的角度指定职责?如果一个工件知道它的位置,那么需要知道该位置的行为是什么?董事会也是如此。顺便说一句,您可能想阅读这篇关于SRP的非常好的文章: