两个相反的API游戏设计

时间:2012-10-25 13:34:06

标签: api oop design-patterns

为游戏设计API时。保持数据结构是私有的,还是将结构返回给那些使用API​​认为是好的设计的开发人员?所以这是一个例子。

假设我有一个棋盘游戏API。以下哪两个例子被认为是“更好”?请注意,出于这个问题的目的,我假设棋盘大小可以变化并且由开发者控制。

public void createboard(ChessBoard board);
public void move(Player playerNumber, Move move);

public void createboard(int x, int y);
public void move(Player playerNumber, int from[], int to[]);

我知道可能没有更好的答案,这只是设计决策的问题。我只是想看看其他人的想法,或者是否有任何有用的提示。

基本上,我假设游戏中包含一个名为ChessBoard的对象,其中包含实际棋盘的2D数组。

第一个示例要求开发人员创建对象并传递它,并要求开发人员实际知道底层数据结构是什么。

然而,第二个要求开发人员只传递数字。这将要求开发人员使用它来维护自己的数据结构。

您认为哪种方法更好的设计?有什么提示吗?

2 个答案:

答案 0 :(得分:1)

当您公开API时,您隐藏的内部实现越多越好。否则,您将来可能会限制自己的进一步增强/更改,因为您不希望破坏与使用以前版本的API的开发人员的二进制兼容性。 (在“真实世界”案例中,客户和客户之间可能会就API进行书面协议,声明如果未经客户明确许可,不得破坏这些协议。)

您的目标应该是允许通过API进行配置,而不是将内部锁定到任何特定实现。它比听起来更难,使用的语言也是一个因素。

答案 1 :(得分:1)

在我看来,你想要你的“引擎”是多么多才重要。

如果您只想要国际象棋显示,则会隐藏API用户的实际棋盘。如果您希望API用户能够将引擎扩展到Archon克隆,那么您希望他能够按照自己的喜好扩展该板。