2011-07-03 125 views
0

這是一個SharePoint +知識庫設計問題。就我的小知識而言,SharePoint對於適當的存儲庫方法來說不是一個非常適宜的氛圍。但有一個模式指南,有一個存儲庫實現。該代碼庫基本上將SPWeb作爲輸入參數,並執行查詢/更新等。SharePoint和知識庫

我的查詢在那裏:它是一個存儲庫的事實意味着SPWeb不能被傳遞,而是從那裏取得 - SPContext。 Current.Web會給出在存儲庫中使用的內容。 SPWeb作爲輸入的事實意味着UI層/服務層必須將SPWeb傳遞到某種方式對我沒有吸引力的方法,因爲這看起來像違反了存儲庫持久性無知原則。

一些意見請

乾杯

回答

1

SPWeb對象包含上下文和權限信息以及網站的詳細信息。將它作爲參數可以輕鬆地完成諸如使用高級對象而不是用戶上下文對象之類的事情。您可以像連接字符串一樣使用站點URL,但這樣做的工作量會大大增加,而且調用者幾乎總是擁有合適的SPWeb對象。

雖然您的代碼理想情況下應該獨立於所使用的數據存儲,但SharePoint並非真正爲您使用標準.net/sql系統構建的那種乾淨的模塊化代碼設置的。有時你可能會接近,但在這種情況下,這並不值得付出 - 調用代碼依然依賴於SharePoint,並且這些項目不可能移動到列表以外的任何地方。

+0

謝謝湯姆。這是一個明確的答案。 – VJVRR

0

只是一個想法,但你總是實例在你的倉庫層自己的SPSite /的SPWeb對象,使用該網站/網頁URL就像一個連接字符串,以及的SPSite/spweb對象作爲連接對象。這樣,如果您需要重新使用沒有當前spcontext的應用程序中的代碼,則可以在Web請求之外使用存儲庫類。

創建自己的spsite/spweb對象與當前的spcontext對象可能會有輕微的性能問題,但不知道有多少。

+0

感謝大衛和那正是我想知道的答案。撇開性能問題,我很困惑,看到這不是模式與實踐指南的一部分。讓我給你一個示例代碼片段添加(T實體,SPWeb網絡)。這是在ListItemRepository內部(它就像是內部用於在SharePoint上執行CRUD操作的所有其他域對象的公共存儲庫)。 – VJVRR

+0

如果你創建你自己的spsite/spweb對象,確保你正確地處理它們,通常的做法是包裝他們使用的語句 – David

+0

David,可能我不能正確解釋。 「這樣,如果您需要重新使用沒有當前spcontext的應用程序中的代碼,則可以在Web請求之外使用存儲庫類。」這是你的評論,我的問題是模式與實踐指南沒有在外面生成SPWeb,而是將其作爲輸入。我在問爲什麼 - 這是SharePoint的特定限制。 – VJVRR