2011-09-02 102 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:

片不應該知道的有關工作簿可言,你應該看看了「脫鉤」!