Java 如果我有一个单独的类来处理一个工件,一个单独的类来处理一个板,那么当工件';你们分开了吗?
Board类有一个8x8 2D数组,数组中有Java 如果我有一个单独的类来处理一个工件,一个单独的类来处理一个板,那么当工件';你们分开了吗?,java,Java,Board类有一个8x8 2D数组,数组中有Pieces,因此我可以通过Board.move(piece1,3,left)来移动Board类中的一块,例如,但是我无法简单地告诉该块移动,就像piece1.move(3,left),因为它无法了解有关该板的任何信息(没有将其作为参数传入),因此它无法将自身移动到特定索引,也无法知道某个片段是否已占用该索引,或者是否被告知要移动到数组的边界之外。一个片段本身不知道它恰好被放置在何处(并且可能不需要知道)因此,需要调用Board方法来移动工件并没有什么
Piece
s,因此我可以通过Board.move(piece1,3,left)来移动Board类中的一块,例如,但是我无法简单地告诉该块移动,就像piece1.move(3,left)
,因为它无法了解有关该板的任何信息(没有将其作为参数传入),因此它无法将自身移动到特定索引,也无法知道某个片段是否已占用该索引,或者是否被告知要移动到数组的边界之外。一个片段本身不知道它恰好被放置在何处(并且可能不需要知道)因此,需要调用Board
方法来移动工件并没有什么错。工件本身并不知道它恰好放置在何处(可能也不需要知道)所以需要调用一个<代码>板>代码>方法来移动一个棋子。 你还有其他尚未建模的对象,比如<代码>游戏>代码>和<代码>玩家<代码>。让我们后退一步,想想每一个模型的职责:
- 件:一件
非常小。它知道它是什么,它是什么颜色,很可能就是它件
- 棋盘:也相当小。它知道它的方块是什么
- 游戏:这可能是最复杂的组件。它知道游戏规则。(毕竟,如果你想更改游戏规则,那么你不应该同时更改
或棋盘
,对吧?)它知道哪些棋子
组成了一套完整的游戏。它知道每个棋子
可以做出哪些动作。它知道任何给定的棋子
在任何给定的时间都在棋子
棋盘上的什么位置
- 玩家:
与玩家
交互。它会告诉游戏
它想在游戏
上执行给定动作。棋子
会允许或拒绝该动作,并修改游戏
(检查、配对、相持、其他游戏的状态
玩家的回合等)。(同样,
棋子和
棋盘不关心这些状态。)
游戏
对象变得臃肿和笨拙,它可能会被分解成碎片,并且主要作为复合对象存在。例如,您可以拥有一个移动列表
,列出给定规则集的可能移动。游戏
由它组成,但不需要在内部包含它
我想得越多,我就越觉得Board
和Piece
在这个领域被划分为真正的“哑”对象。它们甚至不是真正的实体,只是值对象。一个与另一个具有完全相同属性的块基本上可以与另一个块互换。(如果你失去了一个黑主教,你可以用另一个黑主教代替它,而不会对体验产生任何负面影响。)如果将这两个作为不变的数据结构而不是模型来处理,域可能会工作得更流畅
(同样值得注意的是,相同的棋盘
可以被其他游戏
重复使用,这些游戏具有完全不同的棋子集
s。)
作为一个练习,我推荐以下几点。当你考虑实际的测试来验证这个领域时,你会很惊讶你能在游戏领域建模的过程中变得简单多了。我们可以在学术上思考这些象棋模型一整天,但是想出几个验证游戏的测试可以EME。一个更简单的设计。 你还有其他尚未建模的对象,比如<代码>游戏>代码>和<代码>播放器<代码>。让我们后退一步,想想每一个模型的职责:
- 件:一件
非常小。它知道它是什么,它是什么颜色,很可能就是它件
- 棋盘:也相当小。它知道它的方块是什么
- 游戏:这可能是最复杂的组件。它知道游戏规则。(毕竟,如果你想更改游戏规则,那么你不应该同时更改
或棋盘
,对吧?)它知道哪些棋子
组成了一套完整的游戏。它知道每个棋子
可以做出哪些动作。它知道任何给定的棋子
在任何给定的时间都在棋子
棋盘上的什么位置
- 玩家:
与玩家
交互。它会告诉游戏
它想在游戏
上执行给定动作。棋子
会允许或拒绝该动作,并修改游戏
(检查、配对、相持、其他游戏的状态
玩家的回合等)。(同样,
棋子和
棋盘不关心这些状态。)
游戏
对象变得臃肿和笨拙,它可能会被分解成碎片,并且主要作为复合对象存在。例如,您可以拥有一个移动列表
,列出给定规则集的可能移动。游戏
由它组成,但不需要在内部包含它
我想得越多,我就越觉得Board
和Piece
在这个领域被划分为真正的“哑”对象。它们甚至不是真正的实体,只是价值对象。一个与另一个具有完全相同属性的工件基本上可以与另一个工件互换。(如果你输了。)