API设计问题
本文关键字:问题 API | 更新日期: 2023-09-27 18:07:28
在设计api时,我正在考虑如何对以下行为进行建模。
选项1似乎更符合逻辑,但随之而来的是强制不变性,例如检查电子表格是否实际上属于工作簿。
选项2看起来很奇怪,一个电子表格知道如何删除自己,但实际上电子表格有对其父工作簿的引用,并且可以将调用直接委托给他。
或者这真的不是一个有效的情况,因为工作簿无论如何都需要验证它的电子表格??想法吗?
Workbook wb = new Workbook("Finances");
Spreadsheet ss = wb.CreateSpreadsheet("Bob's");
// option 1:
wb.RemoveSheet(ss);
// option 2:
ss.RemoveFromWorkbook();
谢谢大家
我会使用wb.Sheets.Remove(ss)。这允许职责分离,因为Sheets对象是电子表格的集合。这也允许稍后的概念,一个工作表可能在多个工作簿。
我认为选项1最好使用,因为每次当你需要从某个容器中删除一些子实体时,首先你会引用容器,然后你会在实体本身中搜索一些成员
我选择选项1。将工作簿看作一个集合或可枚举对象。与任何集合一样,工作簿的部分工作是管理其中的项。在工作簿中添加和删除工作表是工作簿的责任,而不是工作表的责任。
我个人会留在option 1
,因为工作簿是包含工作表的东西,所以它是某种容器。因此,要从中删除工作表,使用工作簿对象是合乎逻辑的,也是更自然的。
绝对是我的。
你有wb。CreateSpreadsheet,所以如果我已经使用了,我肯定会寻找删除函数在wb对象。
选项1:
工作表根本不应该知道工作簿,您应该查找'decoupling'!