4

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

选项 1 似乎更合乎逻辑,但随之而来的是强制执行不变量,例如检查电子表格是否确实属于工作簿。

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

或者这真的不是一个有效的案例,因为无论如何工作簿都需要验证它的电子表格?想法?

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

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

// option 2:
ss.RemoveFromWorkbook();

谢谢大家

4

6 回答 6

9

我会使用 wb.Sheets.Remove(ss)。这允许职责分离,因为 Sheets 对象是电子表格的集合。这也允许稍后的概念是工作表可能位于多个工作簿中。

于 2011-09-02T18:23:41.223 回答
1

我认为选项 1更好用,因为每次您需要从某个容器中删除某个子实体时,首先您将引用该容器,然后您才会在实体本身中搜索一些成员。

于 2011-09-02T18:24:28.493 回答
1

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

于 2011-09-02T18:24:55.413 回答
1

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

于 2011-09-02T18:24:57.947 回答
0

对我来说绝对是1。

你有 wb.CreateSpreadsheet,所以如果我已经使用过它,我肯定会在 wb 对象中寻找删除函数。

于 2011-09-02T18:24:18.340 回答
0

选项1:

工作表根本不应该知道工作簿,您应该查找“解耦”!。

于 2011-09-02T18:27:21.810 回答