2011-09-02 38 views
4

在设计我的api时,我正在考虑如何为以下行为建模。API设计问题

选项1看起来更合乎逻辑,但是实施不变量例如检查电子表格实际上是否属于工作簿。

选项2看起来很奇怪一个电子表格知道如何删除自己,但实际上电子表格有一个对其父工作簿的引用,并可以直接将调用委托给他。

或者这是真的不是一个有效的情况,因为工作簿需要验证它的电子表格不管是什么?想法?

Workbook wb = new Workbook("Finances"); 
Spreadsheet ss = wb.CreateSpreadsheet("Bob's"); 

// option 1: 
wb.RemoveSheet(ss); 

// option 2: 
ss.RemoveFromWorkbook(); 

谢谢大家

+0

为什么不是两个?在我看来,选项2可以简单地称为选项1,或者反之亦然。 – Reddog

回答

9

我会用wb.Sheets.Remove(SS)。这允许职责分离,因为Sheets对象是Spreadsheets的集合。这也允许稍后在一张表可能在多个工作簿中的概念。

+0

Aaaaaah,选项3 ...我没有看到那个:) – Reddog

+0

很适合,但我不公开以这种方式公开展示集合。 – Marco

+0

然后我会推荐wb.RemoveSheet(ss)方法。 –

0

对我来说肯定是1。

你有wb.CreateSpreadsheet,所以如果我已经使用过,我会defnitely寻找wb对象中的remove函数。

1

我认为选项1是更好的使用,因为每当你需要从某个容器中删除某个子实体首先你会引用容器,然后你将搜索实体中的一些成员本身。

1

我会与选项1一起考虑。将工作簿视为集合或可枚举。与任何集合一样,工作簿的一部分工作就是管理其中的项目。从工作簿中添加和删除工作表是工作簿的责任,而不是工作表的。

1

我个人会留下option 1,因为工作簿是包含工作表的东西,所以它是某种容器。所以要从中删除工作表,这是合理的,更自然的,恕我直言,使用工作簿对象。

0

选项1:

片不应该知道的有关工作簿可言,你应该看看了“脱钩”!