将 SharePoint 开发与其他形式的开发进行比较
從三個視點檢查 SharePoint 開發很有用:
- 為 .NET Framework 構建可擴展的應用程序
- 構建數據庫應用程序
- 構建傳統的富客戶端應用程序
將 SharePoint 應用程序與可擴展的 .NET Web 應用程序進行比較
您可以從開發人員的角度檢查 SharePoint 開發,該開發人員構建了在大型服務器場上運行的高度可擴展的松散耦合 Web 應用程序。這些應用程序每分鐘必須處理數百個或數千個頁面視圖。
SharePoint 的核心基于 ASP.NET,并在 IIS 上運行,它可具有多個處理負載平衡的前端 Web 服務器。SQL Server 提供了 SharePoint 網站中存儲的數據和文檔的完整性、可伸縮性、可靠性和安全性。以下是可伸縮性影響 SharePoint 開發的一些重要方法。
- API 設計。可伸縮性將驅動 SharePoint 的編程接口的某些特征。當您了解編程接口的設計可提高可伸縮性時,就能更輕松地理解這些接口了。例如,托管客戶端對象模型,抽象地說,該模型與 SharePoint Foundation 服務器端對象模型非常類似,但實際上它更為復雜,因為它使您能夠在從服務器中檢索數據或內容時明確進行控制。
- 解決方案設計。可伸縮性將影響您設計基于 SharePoint 構建的解決方案的方式。您必須避免在服務器上導致不必要的計算或查詢活動的設計。您必須編寫資源消耗量不會多于應有資源消耗量的應用程序。例如,這意味著合理使用協作應用程序標記語言核心架構 和 LINQ to SharePoint 來查詢列表項。
- 最佳實踐。可伸縮性隱藏在作為 SharePoint 開發的最佳實踐 的某些編程方法和問題后面。例如,SharePoint 對象模型中的某些對象具有關聯的非托管數據。因此,您必須了解并遵循對象處理規則。類似地,在使用 SharePoint 中的大型列表時,可考慮幾個最佳實踐。如果您不遵循這些規則,則可能會對服務器場產生負面影響。有關詳細信息,請參閱 SharePoint Foundation 的最佳做法和 SharePoint Server 的最佳做法。另請參見Best Practices: Using Disposable Windows SharePoint Services Objects (該鏈接可能指向英文頁面)和釋放對象。您可使用自動化工具改進您的代碼評審。有關詳細信息,請參閱使用 SPDisposeCheck 自動執行 SharePoint Dispose() 代碼評審(該鏈接可能指向英文頁面)。
有一些與構建高度可擴展的 Web 應用程序的開發人員所面臨的問題相同或類似的問題。我聽過這樣一個情景,一個 SharePoint 開發人員編寫代碼以便按設定時間間隔循環訪問其網站集中的所有文檔并收集要在樹控件中顯示的信息。這在其測試環境中能夠正常工作。但是,代碼設計會產生一個與文檔和列表項的實際數量相關的性能問題。
可伸縮性通過兩種不同的方式影響解決方案設計:
- 您必須構建可分發的應用程序,這些應用程序在部署到多個前端 Web 服務器上時可正常工作。例如,您可為在本地 XML 文件中存儲數據的 Microsoft Business Connectivity Services (BCS) 構建小型 Create/Retrieve/Update/Delete Web 服務(請參閱 Business Connectivity Services)。但是,它在部署到負載平衡服務器場上時將無法正常工作。
- 您必須構建可正常執行的應用程序。例如,除非您確定某個列表將包含幾個列表項,否則不要使用對象模型循環訪問它;而是使用 LINQ to SharePoint,并為 SharePoint 提供優化機會。
有關 SharePoint 開發與 ASP.NET 開發的相似之處和不同之處的詳細信息,請參閱 針對 ASP.NET 開發人員的滑動路徑。另請參見 ASP.NET 開發人員的 SharePoint 2010 開發(該鏈接可能指向英文頁面)。
SharePoint Foundation 的最佳做法包含可幫助您避免對性能造成負面影響的缺陷的指南,其中包括有關對象處理、事件接收器、大型文件夾和列表以及代碼性能優化的指導。
?
將 SharePoint 應用程序與數據庫應用程序進行比較
數據庫應用程序開發是用于查看 SharePoint 開發的有利位置之一。SharePoint 網站中的自定義列表與數據庫表有很多相同之處。您可使用與列表中的列相關的豐富元數據來定義這些列。此外,SharePoint 列表可有效定義外鍵,以便您能對包含相關數據的更多有趣方案進行建模。SharePoint 將為刪除操作提供級聯和限制行為。您可以編程方式或聲明方式創建這些列表,也可以編寫使用用戶定義的列表的程序。這些列表可以是可見的或隱藏的。您可使用 SharePoint 的安全功能來限制訪問。
與 SQL 數據庫形成直接對比的 SharePoint 的一個方面是,您使用非程序的聲明性查詢語言來檢索數據。不過,將使用 LINQ to SharePoint 或使用通過 XML 編寫的協作應用程序標記語言 (CAML),而不使用 SQL。
SharePoint 與數據庫技術的集成程度較深。您可通過 Business Connectivity Services 使用數據庫、Web 服務以及幾乎任何數據源。這些數據源將表示為外部內容類型。
SharePoint 的數據功能的一個有趣特征是,它不具有事務性保證。例如,您無法確保以下兩個操作要么都發生,要么都不發生:在一個表中插入列表項,同時在另一個表中更新列表項。SharePoint 將不會用作實現事務性系統的平臺。相反,應在可提供適當保證的外部數據庫中實現此類事務性系統。然后,您可通過使用 Business Connectivity Services 在 SharePoint 中顯示這些數據。當您設計 SharePoint 應用程序時,您必須考慮此特征。
SharePoint 的數據功能與傳統數據庫開發的數據功能之間的一個重大區別是,SharePoint 列表(可與數據庫表進行比較)不一定是矩形。在 SharePoint 中,內容類型將定義構成列表中的列表項(可與行進行比較)的字段。可將其視為列表項的架構。SharePoint 列表可包含多個內容類型的列表項。下圖表示一個包含兩個內容類型的項的 SharePoint 列表:LABOR 和 MATERIAL。
圖 2. 非矩形 SharePoint 列表
這將影響您設計和開發使用列表項以及列表項中的字段的應用程序的方式。如果您必須有矩形數據,則可定義列表,使其只能包含一個內容類型。如果您啟用非矩形數據,則當您循環訪問列表項時,您必須檢查內容類型并相應更改代碼的行為。
另一個有趣的特征是,由于存在內部實現詳細信息,與使用 SQL 查詢表相比,使用 LINQ to SharePoint 或 CAML 查詢 SharePoint 的速度要慢得多。您不需要創建以下設計,其中的某些列表意外增長到 50,000 或 100,000 個項,并且用戶可隨意嘗試在瀏覽器中的窗口中顯示列表。SharePoint 2010 包含可阻止這類設計導致服務器場關閉的限制功能。但用戶界面將會變得無法對用戶作出響應。可以通過多種方式處理包含大量項的列表。您必須有意地處理此問題。有關詳細信息,請參閱處理大型文件夾和列表。
SharePoint 基于 SQL Server 構建。文檔庫和 SharePoint 列表存儲在數據庫中。當您查看 SharePoint 安裝的體系結構圖時,您會發現這一點。實際 SharePoint 數據庫與 SharePoint 開發人員之間并沒有特別的關系。您從不直接訪問此數據庫。您總是使用編程接口來更改網站、列表和文檔庫。不過,您可使用相同的 SQL Server 安裝來承載您直接使用或通過 Business Connectivity Services 使用的數據庫。因此,它可以是您用來構建 SharePoint 應用程序的基礎結構的一部分。
Microsoft Access 服務允許(但也有限制)您將 Access 數據庫發布到 SharePoint 網站。這會帶來一些很有用的機會,由于它允許 SharePoint 用戶以一致且熟悉的形式共享數據。
將 SharePoint 應用程序與傳統的富客戶端應用程序進行比較
SharePoint 與操作系統有很多共同之處:
- SharePoint 包含存儲。包含文件夾的層次結構的文檔庫與文件系統中目錄中的文件很類似。
- SharePoint 具有可編程的用戶界面。
- 在與操作系統一起使用時,您可編寫以不同級別的特權運行的代碼。通過使用 SharePoint 開發,您可編寫必須使用服務器場管理憑據運行的代碼。您可編寫在沙盒解決方案中運行的代碼,也可編寫在客戶端瀏覽器中運行的 JavaScript。
- 在與操作系統一起使用時,您可編寫服務,這些服務為構建具有復雜動態的 SharePoint 應用程序提供必需的基礎結構。
再次說明一下,規模是最大的差異。規模將驅動 SharePoint 的可編程性特征。您可編寫在數百臺服務器上以高性能運行的軟件,以便為整個企業提供一個可提高協作和工作效率的一致體驗。當您從傳統應用程序開發轉向 SharePoint 開發時,處理可伸縮性問題是您要付出的準入代價。
總結
以上是生活随笔為你收集整理的将 SharePoint 开发与其他形式的开发进行比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: erlang 编译之 to_core
- 下一篇: java网络编程 个人心得