将 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…

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

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

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

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

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

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

MFC多语言实现方法

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

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

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

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

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

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

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

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

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

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

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

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

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

更新两个WPF开源项目

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

OpenGL ES 3D 粒子系统小结

2019独角兽企业重金招聘Python工程师标准>>> 所谓粒子系统可以想象为一堆粒子由一个点或一个面按照一定的规律进行喷射。 粒子系统大致分为2类:一类为“点喷式”,一类为“面喷式”。可以想象前者由一个点进行喷射,类似于焰火&…

理科生用创意毁灭世界,爆笑!

全世界有3.14 % 的人已经关注了数据与算法之美1、青年问禅师:“大师,我很爱我的女朋友,她也有很多优点,但是总有几个缺点让我非常讨厌,有什么方法能让她改变?”禅师浅笑,答:“方法很…

我的C#/.NET学习诀窍——LINQPad

在我以往的文章中,尤其涉及代码演示的,都使用了同一个工具——LINQPad。但许多客户面对我分享的.linq源文件都迷茫不知所措,因此有必要来聊聊一下这个强大的工具。本文首先将对该工具做个简单的介绍,并且分享一些LINQPad的优点&am…

数学在生活中无处不在,36个生活小故事涵盖小学所有的数学知识!

数学不是脱离生活的,而是源于生活,更要回归于生活。解决生活中遇到的问题,就是最自然的数学应用题。生活场景中的学习,是最生动的体验式学习机会。用学到的数学知识来解决生活中的问题,正是孩子体会数学奥妙的绝佳机会…

面试八股文:你写过自定义任务调度器吗?

最近入职了新公司,尝试阅读祖传代码,记录并更新最近的编程认知。思绪由Q1引发,后续Q2、Q3基于Q1的发散探究Q1. Task.Run、Task.Factory.StartNew 的区别?我们常使用Task.Run和Task.Factory.StartNew创建并启动任务,但是…

快速掌握MATLAB应用,从这一步开始

有人说,“MATLAB除了不会生孩子,什么都会。”矩阵运算、数据可视化、GUI(用户界面)设计、甚至是连接其他编程语言,MATLAB都能轻松实现!那么,MATLAB到底有多厉害?MATLAB拥有丰富的算法…

mobile.php discuz,电脑访问discuz手机版【触屏版跳转标准版的修改方法】

推荐方法:以前我们介绍过如何通过修改Chrome浏览器运行参数的方法来模拟手机访问网站,但是在Chrome 32和33版本以后增加了更加便捷的方法,在开发者工具中只需要设置一下就能方便的模拟各种手机型号的访问效果了。方法如下:1、打开…

深入探究ASP.NET Core读取Request.Body的正确方式

前言相信大家在使用ASP.NET Core进行开发的时候,肯定会涉及到读取Request.Body的场景,毕竟我们大部分的POST请求都是将数据存放到Http的Body当中。因为笔者日常开发所使用的主要也是ASP.NET Core所以笔者也遇到这这种场景,关于本篇文章所套路…