2

例如,在为游戏设计 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 数组。

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

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

您会考虑哪种方法更好的设计?有小费吗?

4

2 回答 2

1

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

如果您只想显示国际象棋,您可以对 API 用户隐藏实际的棋盘。如果您希望 API 用户能够将引擎扩展到 Archon 克隆,那么您希望他能够根据自己的喜好扩展开发板。

于 2012-10-25T13:55:53.800 回答
1

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

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

于 2012-10-25T13:44:08.847 回答