两个相反的API游戏设计

两个相反的API游戏设计,api,oop,design-patterns,Api,Oop,Design Patterns,比如说,为游戏设计API时。将数据结构保持私有是更好的做法,还是将结构返回给开发人员/使用API的开发人员被认为是好的设计?这里有一个例子 假设我有一个棋盘游戏API。以下两个例子中哪一个被认为是“更好”?请注意,出于这个问题的目的,我假设棋盘大小可以变化,并且由开发人员控制 public void createboard(ChessBoard board); public void move(Player playerNumber, Move move); 或 我知道可能没有更好的答案,这只

比如说,为游戏设计API时。将数据结构保持私有是更好的做法,还是将结构返回给开发人员/使用API的开发人员被认为是好的设计?这里有一个例子

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

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

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

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

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

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


<> P>哪种方法你会考虑更好的设计?有什么提示吗?

当您公开API时,隐藏的内部实现越多越好。否则,您可能会在将来限制自己进一步的增强/更改,因为您不想破坏与使用先前版本的API的开发人员的二进制兼容性。(在“真实世界”的情况下,客户和客户之间可能有关于API的书面协议,规定未经客户明确许可不得破坏API)


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

在我看来,你希望你的“引擎”有多大的通用性是很重要的

如果你只想有一个象棋显示,你会对API用户隐藏实际的棋盘。如果您希望API用户能够将引擎扩展到(比如)Archon克隆,那么您希望他能够根据自己的喜好扩展电路板

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