怎行使Microsoft技术栈

Microsoft技术栈最近有恢宏之更动,这使开发人员和官员都想明白她们到底该关注如何技术。Microsoft自己并无思打官方层面达到反对Silverlight这样的技能,相对而言他们又欣赏让这种技术逐渐剥离人们的视线,否则局面或会见越来越混乱。如果你想了解该问题的答案,那么好查“.NET业务应用程序技术指南”这个略带有信誉的文档。该文档披露给去年早些时候,它深入探讨了Microsoft打算在怎么样领域付出努力,我们当回避哪些技能相当内容。

下这个概要图是咱探讨Microsoft及其相关技术之一个充分好之起点。

(单击放大图片)

 

C++ 1

尽可能早日放弃Silverlight和Flash

虽WinForms和Web表单这些原本的.NET技术还占据一席之地,但是Silverlight跟Flash这样的RIA容器绝对是出局了。正而下面图5-15所出示的,Microsoft并无思空等正在Silverlight
5所计划之10年生命周期。他们一度打算当2015年的放弃RIA容器。

 

C++ 2

高端应用程序更倾向于意以当地技术;而低端应用程序则期待HTML5的力持续上扬。尽管没有以开发人员推向具体的某一样种技术,但是于这种变更我们要使留心的事情是:

  • 若是你方对接至地面利用,那么你可因死来即使可以于另Windows设备及运行的XAML/.NET作为目标,这样您便可知使祥和就部分技术甚至是代码了。可移栽类库还同意你当不同的阳台里并享类库,包括Silverlight。
  • 于因浏览器的HTML5使而言,Microsoft提供了重要的工具及框架,它们能够扶助你因最新的正规创建而用来其它设施的应用程序。Silverlight和HTML的互操作性还允许你通过混合应用程序进行逐级的交接。

移动

Windows 8商店有三个相当但是差的挑

就Windows
8商店应用而言,Microsoft过去直无愿意以开发人员推到某个一样种植具体的艺栈上。这个策略现在为尚无发生变化;在.NET/XAML、C++和JavaScript/HTML5这些技巧中选择的显要标准是开发人员最熟悉哪种技术。

除外,他们还涉嫌了C++,因为她有性能优势。可重用性并无是怪为关注之一个碰,因为马上三单平台都能在Windows
Phone和Windows桌面之间共享代码和资源。

地方选项适合Windows Phone

Windows
Phone推荐的技术是.NET和C++。再次重申,需要专注一下C++的属性优势,但是他们说的顶多之抑开发者应该运用好更加熟悉的技能。

尽管Windows Phone兼容PhoneGap/Apache
Cordova,但是就并从未给提及。推测起来原因想必是他俩以为在稍微设备上PhoneGap的习性于起.NET或者C++要不等。在2013秋的Build大会上性可靠是无限紧要的话题,超出了诸如一般可用性、可视化设计及深度OS集成等其他话题。

挪动Web:都足以以,除了Web表单

一旦你想选同一栽能以富有活动装备上运行的、基于Web的化解方案,那么有多种选择。使用Modernizer的ASP.NET
MVC是基线推荐方案,你能够利用她创建单页面应用程序(ASP.NET
SPA)。Microsoft对SPA的见是它还如是一律种植设计模式而无是技术,同时Microsoft还极力推荐使用Knockout和Breeze及时点儿个类库。

为快速地装配CRUD作风的应用程序,LightSwitch被列了下。虽然该框架几乎从未针对HTML渲染进行控制,但是却足以被开发人员不必为各种各样的屏幕大小构建布局,减少了工作量。

ASP.NET
Web页面凡是吗活动Web提供的季个选项。它基于Razor语法,为开发者提供了和PHP和风俗ASP等脚本语言相似之开销体验。

指南中并无提及比较一直的ASP.NET渲染工具箱——Web表单。虽然该技能还当积极的开支被,同时自理论及说她吧会渲染设备特定的HTML,但是在实践中Web表单并不曾发挥其确实的潜力。它所渲染之HTML和JavaScript好像比低效,此外其高级功能所不可不的view
state克很快地压垮一个无线电话的网络连接。

服务

因大部分应用程序都依赖让表面的数量存储和处理,所以服务器端开发还是一个异常重大之考虑要素。Microsoft认为现在来6种植有效的技巧选择。

首选:ASP.NET Web API

基于Microsoft所提供的消息,新品类之默认选项应该是ASP.NET Web
API。如果只要付出遵循REST风格的劳动,或者用配合“Akamai、Windows
Azure CDN、Level3等”Internet缓存,那么可以以该技能。

开发者在运用Web
API的时理应关注OData以及JSON,前者标准化了REST端点的暴露方式。

次精选:WCF

暨Web
API相比WCF被当是一律种植更加灵活的挑项,因为它们并没跟其它特定的传导协议或者信息格式绑定。例如,你会用TCP或者命名管道与二进制消息提升性。缺点是WCF使用起来比艰难,特别是当您想使为JSON或者其他非基于SOAP的格式暴露数据常常更是如此。

WCF是面向企业计划的,理念是RPC风格的通信。虽然它为足以以面向群众的REST风格的设计模式,但是就并无是该场景下之首选项。

WCF和OData

倘若您的要办事是CRUD风格的服务层,同时想只要运用WCF技术栈,那么WCF数据服务凡一个是的选。它同ASP.NET
Web API共享OData类库,并且普通会与Entity
Framework重组使用。

Workflow服务

Workflow服务是Windows
Workflow及WCF的重组。使用其的原由只有出一个,那就是你的劳动中间已经应用了Windows
Workflow。Microsoft认为没给你选择是选项之另因。

动SignalR进行双向通信

使你只是想使用基于.NET的客户端,那么WCF为美好的双向通信提供了过多拣项。但是若您想使的凡会又支持.NET和根据Web的客户端,那么SignalR凡一个十分正确的取舍。

基于Microsoft提供的消息,SignalR甚至能够壮大及上百万用户。Web客户端好使用WebSockets,但是得当必要的时刻自动地回退到原有的模式,例如长轮询。

SignalR还有一个针对.NET客户端的类库,允许Web和本土客户端共享服务。

LightSwitch,另一个OData提供者

Microsoft对OData的钟爱程度夸大到我们几乎难用语言来讲述。到如今结,我们早已观望了用于WCF和Web
API的OData,但是就并没终结。尽管通常情况下我们以的是LightSwitch的客户端,但是大明显我们还可采取它们的劳务器端能力快速地非常成一个服务层。

Microsoft宣称LightSwitch不欲外编码,但是还要也警告说这么见面丧失灵活性。

饱受小型企业应用程序指南

Microsoft为受到小型企业编写指南时一直遵循如下目标:

  • 增进就速度,缩短上市时
  • 增长生产效率并退资金
  • 轻开始
  • 以及市场产品的合作和合并
  • 称计算的灵活性和降低资金的火候

通俗点说,它的意就是是“让工作变得重复快,成本还小”。Microsoft提供的此具体的指南取决于你欣赏怎么的示模式。

蒙小型企业Web应用程序

于速而任意的CRUD风格的应用程序而言,Microsoft推荐的首选平台仍然是LightSwitch。LightSwitch最初给描述为一个对非专业程序员的工具。许多人口将它们看做是一个访问的几近层替代。但是趁本Microsoft更多的拿其看作一个劳务为得迅速推出应用程序的IT部门的工具,这个愿景似乎也曾经一去不复返。

连片下去要摆的是Web表单。是的,令人尊敬的Web表单依然是初类型推介以的艺。Microsoft将那个看作是一律种植折中技术,介于易用但是生限量的LightSwitch和复杂性的ASP.NET
MVC之间。Web表单包含丰富的数表格等功能,它依旧会很好的适用于店内部的应用程序。

此外还提到了ASP.NET
Web页面,但单纯是粗略介绍了瞬间。如果您道Web表单所提供的渲染能力还无法满足自己之急需,那么可挑选ASP.NET
MVC。但是Microsoft针对那较长时间的读书曲线提出了警示。

构建Windows桌面程序

尽管有因C++的GUI工具集(例如MFC和ATL/WTL)都非以列表上,但是早期的.NET
UI工具集WinForms以及WPF还是让认为是行得通之选料项。这二者都支持现代底视角,例如数据绑定和async/await,同时还能够使WCF或者SignalR进行双向通信。

每当WPF和WinForms之间做出选择之前需要考虑下几乎沾因素:

首先是难度。比起WPF来WinForms更易理解,甚至对高级开发者也是这般。WinForms使用非常简单的数码绑定,同时更爱好传统的MVC或者MVP机制。而对WPF而言,用户在会科学地以MVVP模式之前需要学习一个扑朔迷离的数量绑定框架。成功地动WPF还需了解资源字典、转换器、ICommands和XAML模版引擎方面的知。

一派,如果你还打算将Windows Phone或者Windows 8
商店作为靶子平台,那么你要上学怎么下XAML。在这种情形下,从WPF入手会让您还有或以不同的阳台中间共享代码。

以及大规模的WinForms应用程序相比,WPF灵活的渲染引擎渲染的外观还可以。当然这为是出代价的,在同等条件下WPF应用程序通常比WinForms应用程序运行的款。

附带取一下LightSwitch桌面客户端。好像她并无能够提供其他可以在桌面客户端着采用的东西,所以像从未太多的理选择她。

有道是避免采取客户端—服务器模式

当Microsoft谈到“客户端—服务器”的早晚,他们实际上指的凡那些直接与数据库通信的应用程序。尽管她们肯定当时依然是一个老大广泛的模式,但是她们要期待新路应用3层设计,在客户端和数据库里创造一个服务层。与一直访问数据库相比,这提供了再度好之可伸缩性,同时还提供了同种好绕开防火墙及另外障碍物的方式。另外它同意以应用程序移植到数据库让不可用的平台及。

“现代化” —放弃Windows桌面

对于怎样“现代化”桌面应用程序Microsoft提供了众多提议。下面的建议大部分凡有关于做好以应用程序迁移至外平台达成的准备的,但是就算你并没打算放弃Windows桌面,这些点对君而言还是是生一定用处的。相关建议之摘要如下:

  • 使用模型—视图—视图模型(MVVM)设计模式:Microsoft客户端平台(包括WPF)让咱能容易地采取MVVM模式构建应用程序。借助于该模式,你能够以表现和状态与行事分开,能够创立好好地当不同装备里分享、干净而保护的代码。
  • 客户端逻辑下可移栽类库:.NET可移栽类库允许我们于差不多只平台里共享二进制,例如桌面、Windows商店应用、Windows
    Phone应用以及另外平台。使用.NET可移栽类库实现客户端逻辑能够大幅度地简化多独阳台及又体会的开创工作。
  • 改良用户体验:最终用户当前所要之观可以使用.NET针对桌面平台时的翻新来贯彻。像“快速流畅”、“返璞归真”和“事半功倍”这样的计划性原则会通过在XAML设计受到应用现代UI、谨慎地采取动画片以及常见地落实.NET异步编程这些主意应用到曾有些桌面应用程序中。
  • 拿工作逻辑移动至服务器:双层应用程序(客户端/服务器)很为难扩展至新设备及。推荐方法是拿业务逻辑分离成那个鲜明的劳务,然后在其他设备上用这些服务。
  • 扩充至云端:一旦将事情逻辑从客户端挨分别出来,那么即使可借助Windows
    Azure所提供的有余化解方案以那个活动及云端。将这些逻辑改造成云服务能极大地提升都生缓解方案的弹性与可扩展性,让它做好拥抱多种设备的预备。

Android和iOS平台及的.NET

Microsoft正在和部分合作伙伴一起努力,以扶助用户实现现代化。下面是对准各一个合作伙伴所不可不说的内容:

  • Xamarin
    是一个跨平台的开发工具,以Windows、Windows
    Phone、iOS和Android设备也目标的应用程序能够依靠它分享C#代码。我们能用其访问根API,在设施里重复用客户端逻辑代码的同时创建定制的视图。
  • ITR-Mobility iFactr
    和MonoCross
    提供了一个解决方案,该方案允许我们使用C#构建而运行为要运动平台上之企业走采用。它提供的抽象UI和商号数量并等服务会给事情程序跨多种设备。
  • Mobilize.NET源于于Art in
    Soft公司,它提供了可辅助用户以留应用程序迁移到现代化平台(包括Web、移动与讲话)上的缓解方案与劳动。方法是用曾有些源码转换成为没运行时之初代码。
  • Citrix Mobile
    SDK for
    Windows
    Applications为开发人员提供了长的家伙箱,能够帮助她们移动化LOB
    Windows应用或编写新的能以中央服务器(Citrix
    XenApp/XenDesktop)上执行还能用Citrix
    Receiver从随机运动装备看的触摸友好的下。

边注:Microsoft正在主动推进Xamarin和MonoCross的实况最终应会告一段落一直沿袭的Microsoft打算控告Mono制造商的谣传。

巨型、关键作业应用程序指南

对大型企业与它的要作业应用程序而言,焦点不再是资产以及生产率,而是复杂性管理和劳动之身分。下面的指导方针并无吻合数据让或CRUD风格的应用程序,从事这种工作的开发者应该参照受小型企业指南。这些指导方针适用于有好多彼此关系的一对以起恢宏独立子系统的网。

商家Web应用程序

Microsoft对于当下一点的姿态是明摆着的,他们觉得重要的Web网站应该利用ASP.NET
MVC。唯一的架问题是是否应当它们点下单页面应用程序设计模式。

免引进用另外Web技术,例如Web表单和Web页面。因为它们不享有MVC的控制性和可测试性,这反过来限制了而是获得的劳动的身分。

商家桌面应用程序C++

对于小型应用程序,Microsoft的引荐列表中还带有WPF和WinForms。这种现象下她们还长了C++和Win32/MFC。Microsoft推荐在可以与Microsoft
Office相比的这种大型、长期项目蒙应用C++。这里的一个如果是AutoCAD和Paint.NET在圈方面是例外的。

企业Windows商店/Windows Phone

对于这等同庙会景,Microsoft给来之建议类似于“新兴应用程序模式”部分所被起的建议,除此之外并没其它情节。这样的姿态并无给用户灌输太多之信心,但是呢无彻底地放弃平台。

模式与行

当指南之尾声,Microsoft并不曾持续讨论产品,而是花了约20页左右之字数讨论模式及施行。

操纵反转

Microsoft在座谈依赖注入及决定反转容器上花费的雅量日子简直叫人惊讶。他们排有了9独独立的操纵反转容器,其中最为着重的一个是不附属于Microsoft的社区运行的类别。应该小心的凡,他们排有底群框架并无是真正意义上之IoC容器,而是依靠注入框架。

Microsoft并不曾在当下无异于有些清晰地发表出好还爱好组合根(一种DI模式)还是更欣赏服务一定(一栽IoC容器模式),所以用户指向当时两边的迷离依然留存,这一定令人寒心,因为正如Mark
Seemann所说:他们于本质上是相对的。

Microsoft使用了“单一任务模式”证明因注入的用。例如,他们说SRP可能会见促成一个近似的构造函数中发出15只因。为了“解耦”这些靠,他们建议由构造函数中移除这些靠,然后运控制反转容器进行注入。

Microsoft还涉嫌应利用面向切面的编程加上一些任何的间接层,并且更加注入依赖。

边界及下文和复杂性管理

为控制复杂性,Microsoft花了几页讨论“边界上下文”的概念。据Eric
Evans所说,它的中心思维是以应用程序分成更粗之局部,各片中用有限的共享。下面的事例有4单独立的仓库,它们利用不同之后端和一个一同的UI。

(单击放大图片)

C++ 3

Microsoft在当下无异于有的建议非常有道理。对于让辨认出来作为重大任务的边际及下文,你可以采用越来越高昂的下令、查询职责分开(CQRS)或者领域让设计(DDD)模式及完全的自动化测试。同时,辅助性的疆界上下文可以以轻量级的、CRUD风格的架构。当然,遗留代码会生出其自己之堆栈,在那边她会被切断并叫渐渐替代。

通信同防范

如果想使当边界及下文之间共享信息,那么Microsoft推荐尽可能地利用异步消息。这样每个片就是能单独工作,即使有部分失败了为未会见潜移默化其他部分。对于简易的场面,命名管道与Microsoft消息队列是较轻的选项项,而重复扑朔迷离的系统虽然需要一个劳务总线。Microsoft提到了Windows
Server服务总线、Windows
Azure服务总线以及NServiceBus,但是并不曾说又欣赏哪一个。

分界及下文暴露的享有服务还该发一个防护层对该展开保护。就比如应该对参数进行检讨为护国有函数一样,边界上下文的防护层可以为脚的数据存储免受畸形消息的伤害。这同一层会证明进入的信,执行有必要的变换,并且保证好数据会吃拍卖和储存。用户可应用普通的.NET代码实现,但是于复杂的、有众多再三变动之政工规则的现象,Microsoft推荐使用规则引擎以及合平台,例如BizTalk。

拍卖遗留代码

处理遗留代码的率先步是吗那缔造一个外观层。该外观层应该使用现代的技巧,例如持续的、可扩大的缓存,并且该隐藏旧代码应用的所有模式。随着岁月的缓,遗留代码用见面于换成,外观层会于重定向到新的服务层。

结论

Microsoft推荐使用有的.NET
本地、Web和通信框架,浏览器端的Silverlight和.NET
Remoting除外。在局部场景下她们还援引使用C++和JavaScript。像VB
6和风俗ASP这样的原有平台从无受提及,所以依然当动用这些技巧之小卖部该尽快地迁移到新技巧上。

无生所预期,Microsoft继续强调了指注入,特别是它们与ASP.NET MVC及Entity
Framework的结合。企业准备集成现场跟云架构的样子让BizTalk这个早已受当曾死之艺来看了还焕发活力的企。

至于作者

C++ 4Jonathan
Allen
起2006年始于便直在也InfoQ撰写新闻,他本凡是.NET专栏的责任编辑。如果你想吧InfoQ撰写新闻或者教育性的稿子,可以联系他:jonathan@infoq.com。

 

查看英文原文:What to Use on the Microsoft
Stack

查看中文原文:http://www.infoq.com/cn/articles/Microsoft-Stack-2013