2011-07-03 68 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