将 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 列表
非矩形的 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 开发时,处理可伸缩性问题是您要付出的准入代价。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio 2022这些重大更新,影响每一位.NET开发者!

难得五一长假,蹲家里盘点了一下这2年.NET的发展,可谓日新月异,重现辉煌,各种重磅更新接踵而至:1 .NET Core3.1各种最受欢迎、性能排行等榜单霸榜,3个月增加100w的关注者;2 .NET5让.NET Framewor…

父与子一起学python3,父与子的编程之旅 与小卡特一起学Python 第3版(全彩印刷)...

章 出发吧 11.1 安装Python 11.2 从IDLE启动Python 21.3 来点指令吧 31.4 与Python交互 51.5 该编程了 71.6 运行你的个程序 91.7 如果出现问题 101.8 你的第二个程序 12第2章 记住内存和变量 152.1 输入、处理、输出 152.2 名字 172.3 名字里是什么 212.4 数字和字符串 222.5 …

影响计算机算法世界的十位大师

全世界有3.14 % 的人已经关注了数据与算法之美1、伟大的智者——Don E.Knuth,中文名:高德纳(1938-)算法和程序设计技术的先驱者。Oh,God!一些国外网站这样评价他。一般说来,不知道此人的程序员是不可原谅的。其经典著作《计算机程序设计艺术》…

【翻译】WPF中的数据绑定表达式

有很多文章讨论绑定的概念,并讲解如何使用StaticResources和DynamicResources绑定属性。这些概念使用WPF提供的数据绑定表达式。在本文中,让我们研究WPF提供的不同类型的数据绑定表达式。介绍数据绑定是一种强大的技术,它允许数据在UI元素和业…

java网络编程 个人心得

TCP协议是一个有连接可靠地协议。TCP编程的核心思路 开发服务器端ServerSocket ssnew ServerSocket(9000)ss.accept(); publicclassTcpServer {publicstaticvoidmain(String[] args) {try{ServerSocket ssnewServerSocket (9000);//创建SocketServer对象,并绑定端口Socket sss…

php对表格的处理,JavaScript_js处理表格对table进行修饰,js处理表格 1、行颜色间隔显示 - phpStudy...

js处理表格对table进行修饰js处理表格1、行颜色间隔显示css样式:两个选择器.one{background-color:#33ffcc;}.two{backgound-color:#ffff66;}function trcolor()//控制间隔行颜色显示不同{var tabNode document.getElementsByTagName("table")[0];//获取…

12个关键词,告诉你到底什么是机器学习

全世界只有3.14 % 的人关注了数据与算法之美编者按:随着人工智能(AI)技术对各行各业有越来越深入的影响,我们也更多地在新闻或报告中听到“机器学习”、“深度学习”、“增强学习”、“神经网络”等词汇,对于非专业人士来说略为玄幻。这篇文章…

WPF实现实现圆形菜单

WPF开发者QQ群&#xff1a; 340500857 有小伙伴需要实现圆形菜单。效果如下&#xff1a;一、Xaml代码如下<Window x:Class"WpfRoundMenu.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.mic…

MFC多语言实现方法

2019独角兽企业重金招聘Python工程师标准>>> 一、字符放在DLL资源文件中&#xff0c;切换资源模块(程序默认使用exe模块资源)。 实现要点&#xff1a; 新建一个只包含资源的DLL。通过函数AfxSetResourceHandle设置资源模块。 示意代码为&#xff1a; AfxSetResource…

oracle dbfile数,通过案例学调优之--Oracle参数(db_file_multiblock_read_count)

通过案例学调优之--Oracle参数(db_file_multiblock_read_count)应用环境&#xff1a;操作系统&#xff1a; RedHat EL55Oracle&#xff1a; Oracle 10gR2Oracle DB_FILE_MULTIBLOCK_READ_COUNT是Oracle比较重要的一个全局性参数&#xff0c;可以影响系统级别及sessioin级别。…

转行程序员后,我开始后悔没做这件事

全世界有3.14 % 的人已经关注了数据与算法之美程序 数据结构 算法 ——图灵奖得主&#xff0c;计算机科学家N.Wirth(沃斯)作为程序员&#xff0c;我们做机器学习也好&#xff0c;做python开发也好&#xff0c;java开发也好。有一种对所有程序员无一例外的刚需 —— 算法与数据…

Oracle应用集群详解

了解兼容性Oracle真正应用集群环境要运行与在同一群集数据库的不同版本的Oracle RAC的配置&#xff0c;还必须安装集群。例如&#xff0c;要运行在同一个集群Oracle9i和Oracle 10g&#xff1a;对于Oracle RAC节点上运行的Oracle9i数据库&#xff0c;您必须安装Oracle9i集群&…

工业互联网的两种极端想法和两点反思

目 录1. 概述2. 两种极端想法3. 两点反思1. 概述最近走访了很多企业&#xff0c;涉及到的行业包括&#xff1a;军工、特钢、有色、加工制造&#xff08;海洋钻井平台&#xff09;、建材、纺织等&#xff0c;在与不同的行业交流的过程中&#xff0c;我发现…

oracle重新编译package,如何有效的编译数据库中的失效对象(Package,trigger等)

在utlrp.sql脚本中&#xff0c;Oracle注释到&#xff1a;Rem utlrp.sql - UTiLity script Recompile invalid Pl/sql modulesRemRem DESCRIPTIONRem This is a fairly general script that can be used at any time toRem recompile all existing invalid PL/SQL modules in a …

兵马未至,数据先行,且看如何进行数据挖掘!

从数据中抽取信息从信息中挖掘知识随着大数据时代的到来&#xff0c;数据挖掘的重要性越发显著。可谓是兵马未至&#xff0c;数据先行。所谓数据挖掘&#xff0c;一般是指从大型数据库中将隐藏的预测信息抽取出来的过程&#xff0c;而更为精确的解释就是“从数据中挖掘知识”。…

微软加入字节码联盟,进一步开发支持Blazor 的WebAssembly技术

字节码联盟 (Bytecode Alliance)宣布已正式成为 501(c)(3) 非营利组织&#xff0c;参与组建的企业/组织包括 Fastly、英特尔、Mozilla 和微软&#xff0c;此外还邀请到了 Arm、DFINITY Foundation、Embark Studios、谷歌、Shopify 和加州大学圣地亚哥分校加入并成为正式会员。B…

印象笔记的试用印象

用过有道笔记&#xff0c;现在正在用麦库。总的来说&#xff0c;越来越依赖&#xff0c;感觉非常好用。现在已经超越我手机里的鲜果联播&#xff0c;成为第一常用的软件了。 不说麦库&#xff0c;最近听说evernote出了国内版&#xff0c;想起原来选择手机笔记软件时也比较过eve…

oracle外网监听端口,oracle 11g 修改默认监听端口1521

OS:Oracle Linux Server release 5.7DB:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production1、查看监听状态&#xff1a;SQL> !lsnrctl statusLSNRCTL for Linux: Version 11.2.0.3.0 - Production on 12-NOV-2013 01:36:29Copyright (c) 1991,…

传说中的贝叶斯统计到底有什么来头?

全世界有3.14 % 的人已经关注了数据与算法之美贝叶斯统计在机器学习中占有一个什么样的地位&#xff0c;它的原理以及实现过程又是如何的&#xff1f;本文对相关概念以及原理进行了介绍。引言&#xff1a;在很多分析学者看来&#xff0c;贝叶斯统计仍然是难以理解的。受机器学习…

更新两个WPF开源项目

前言好久没更新博客了&#xff0c;最近准备重拾博客&#xff0c;将更新恢复起来。开源项目这些年零零散散做了很多项目&#xff0c;准备整理一下&#xff0c;将其开源&#xff0c;现整理了两个项目&#xff1a;绑定引擎&#xff08;BindingEngine&#xff09;&#xff0c;插件式…