2010-08-05 58 views
2

我正在構建一個包含多個Connector類的應用程序,這些類與不同的數據孤島交互。例如,請參閱我的早期問題here。無論如何,就像我的例子一樣,幾乎所有這些數據源在訪問時都是昂貴的,因此每個Connector都維護一個緩存來限制訪問。對於每個數據筒倉,都有一個提取數據的IDataSource,以及一個緩存的ConnectorConnector是通過在我的AppFactory類中傳遞IDataSource到工廠方法來訪問的。這是否違反了概念完整性?

不幸的是,正是1 Connector不適合這種模式。活動目錄筒倉速度足夠快,不需要緩存,所以不需要ActiveDirectoryConnector,我的AppFactory類也不會有工廠方法。正如我之前所說的,在其他任何情況下,都會從Connector對象請求數據,只能通過IDataSource參數從方法調用獲得AppFactory

據我所知,我的選擇是有一個淺ActiveDirectoryConnector對象,只是將請求直接轉發到它的IActiveDirectoryDataSource,或根本沒有ActiveDirectoryConnector。在前一種情況下,我保持概念完整性與我的其餘部分Connector s,但我有一個無用的間接水平。在後者中,我犧牲了直接性的概念完整性。哪一個是較小的邪惡?

回答

3

我要說守在原地模型並沒有引進的特殊情況處理的複雜性。有一個Connector只是將請求轉發給最終的數據源是完全合理的。你不會在這裏向後彎腰,暗示Connector隱喻的基本要求它有一個緩存。緩存只是性能優化,Connector概念似乎是一個有用的抽象層,允許您在需要時引入緩存(或其他處理)。

在概念上,這是有點類似於通過存取器方法訪問成員數據爲對象,而不是直接使用成員變量,它被許多人認爲最好的做法的做法。原因與此類似:如果在客戶端和數據之間添加一個間接級別,則可以在將來需要訪問數據時引入其他處理或優化。

+1

從某種意義上說,它只是簡單的情況:零大小的緩存。 – 2010-08-05 20:46:20

+0

我真的很喜歡類似於訪問器方法。 ActiveDirectorConnector與公衆類型名稱{get; set;}類似,它驗證了它的存在。 – DonaldRay 2010-08-06 16:55:25

相關問題