到现在为止,你可能已经找到了这个链接:
http://blogs.msdn.com/sanjaynarang/archive/2009/06/19/should-i-build-my-application-in-sharepoint-vs-asp-net.aspx。如果还没有,那么这是一个不错的起点,其中提出了一些好问题。
接下来,作为一个长期从事.NET开发(自该平台问世以来)和SharePoint架构师(自2003年以来)的人,我要发表我的看法。这基本上是我说我两面都有的方式。
在我看来,SharePoint是一个平台,而不是一个产品。就像ASP.NET为核心.NET框架提供了有价值的基于Web的服务一样,SharePoint在ASP.NET之上提供了额外的服务和功能。这个平台消除了编写许多ASP.NET应用程序中常见代码片段的需要:安全代码、用户配置文件管理、个性化、UI/UX基线等。当你进入管道时,你会得到更多:富缓存支持,只需要最少的配置,通过功能进行定制模块化等。
每个应用程序都应该在SharePoint中构建吗?我永远不会这样推动。对于我的当前客户端,我们使用混合的基于SharePoint和自定义ASP.NET应用程序。无论是在SharePoint中构建应用程序还是从头开始编写ASP.NET,这取决于我们正在做什么。我们进行与你们相同类型的练习。如果SharePoint的功能和特性可以被利用来减少开发时间,那么它就会进入SharePoint。如果需求过于具体或者我们感觉需要绕过SharePoint,我们就采用自定义应用程序路线。
你对你的应用程序有一些非常具体的问题,所以让我根据我对你的要求的了解来试着回答它们:
引用完整性: 根据你所说的,你的数据模型非常特定。本地利用站点列、内容类型和列表建立信息架构可能没有意义。但这并不排除使用SharePoint的可能性。你完全可以构建你想要的数据模型(很可能在SQL Server中),然后使用驻留在SharePoint中的组件消耗它。如果你使用MOSS,则一些BDC WebParts可能适合你。如果不是,你仍然需要编写控件和/或页面来处理数据,对吧?使用SharePoint作为访问SQL直接或(以更可扩展的n层方式)针对其他业务服务的呈现层也没问题。
2000项限制: 这是一个常见的问题,也是一个被误解的问题。不存在2000个列表项的限制;实际的测量标准是每个视图(通过"out of the box views")或容器(例如文件夹)2000个项目时。如果使用分区,在列表中可以存储更多的数据(如果你愿意则可以存储数百万个)。考虑到你的数据结构和可能需要避开SharePoint的列表,如果简单地从SQL Server中消费数据,则这将不会成为问题。
工作流: SharePoint作为工作流主机非常好,而且OOTB工作流非常方便。我假设你正在使用MOSS(而不是直接的WSS),但以防万一:MOSS附带了批准工作流。如果你限于使用WSS,则只有一个可用的工作流程:三状态工作流。
归根结底,SharePoint 是.NET并构建在ASP.NET之上。在SharePoint应用程序中需要编写的代码很多,在自定义.NET中也需要编写。我建议从理解SharePoint为开发人员提供的体验和功能的角度来看待问题,这样可以帮助加速你的开发周期和/或改善用户体验(有时我们作为开发人员会忽略这点)。
然而,Dakota的David提出了一个很好的观点,即SharePoint的开发体验与浅显的ASP.NET不同。需要通过功能部署、了解特定的SharePoint注意事项(例如SharePoint对象的生命周期和处理)等最佳实践,这意味着如果你决定在SharePoint中构建应用程序,则需要学习一些时间。有许多很好的资源(包括StackOverflow的一些人)可以帮助你,但你需要考虑一些学习成本是否值得使用SharePoint。
还有一点需要注意的是:微软正在慢慢将自己的许多产品和平台转移到SharePoint作为它们的UI/UX层,这个趋势正在逐渐增强。PerformancePoint、Project Server、Team Foundation Server和Commerce Server都使用SharePoint作为它们的表示层。这个趋势可能会继续下去,尽管我不知道到什么程度。如果你正在使用这些产品(或者它们在你的技术路线图上),现在投资SharePoint可能会在以后得到回报。
尽管我写了很多关于SharePoint的文章并为其发声,但我认为它并不是每种情况下都是正确的工具。我仍然经常构建WinForms应用程序、智能客户端、命令行应用程序等等。这只是权衡“我得到了什么”和“我花费了什么”(无论是时间还是金钱)的问题。
希望这可以帮到你!