前些日子分别参加了
VSTS
架构师和
VSTS
程序员培训,讲的是微软
vs2008
中的一些最新技术,实际上都是一些比较浅显的讲解,一些概念上的介绍,然后动手根据实习手册做一些上机练习,增强理解。因此我根据前一段时间自己的学习体会加上这个培训,总结如下。
一、我对微软开发体系的一点理解
1.1 .NET核心
首先介绍一下我对微软产品体系的理解:与许多公司不同的是,微软在技术体系上,几乎所有的产品是息息相关的,Windows、Office、Sql Server、Visual Studio .NET等等虽然各不相同,但目前公共的核心已经形成,这个核心就是.NET。
比如:核心组件方面,Office与Visual Studio .NET日渐趋于一致,例如Microsoft正在将Office(2003版本以上)的核心组件VBA 6.X逐步用新的Visual Studio Tools for Office替代;Sql Server2005除了自带一个管理平台外,还有一个基于.Net的Sql Server Business Intelligence Manager,等等。其他的例子许许多多,可以去自己分析一下目前微软产品的后台。
微软现在的产品除了都基于.net外,还有一个很大的特点,即可以基于一些定义好的扩展接口灵活的进行二次开发、扩展,我觉得这也是微软的从自身技术发展和商业考虑的共同结果。微软本身有一个极其庞大的产品线,而且还在不断扩充中,最新加入的产品就是.Net3.0中的WCF、WPF(SilverLight)、WF、CardSpace等。
从技术上考虑,要使这么庞大的产品线运转起来,发挥其最大效益,就需要实现在底层的技术集成,大家功能上能互相引用,互相交互数据,这不就是微软的技术层面的SOA概念吗,而且这一概念由来已久,原先的DNA不也是要完成这样的目的吗。因此就需要有一个通用的技术作为基础支撑,也这就是.net要作为核心的原因。作为这一思路的附带好处,开发人员可以只学习一个技术就可以在微软的技术平台上通畅无阻了,也是一件好事呀。以开发带动产品市场,这是各大软件厂商的共识,最大限度地将开发人员吸引到自己的开发体系下,何愁自己的其他产品卖不动呢?我觉得这也是.net和java之争、VS C++和C++ Builder、VB和Dephi之争的根源,利益之争。
从商业上考虑,微软的产品理念是要保罗万象,即:“微软能提供你开发、使用的一切软件,你不用再去找别人了,用我的就好了”,用此策略与其他的所有公司进行竞争。微软有一个惯例:“借鉴”别人的先进技术。最有名的就是Navigate的浏览器的“借鉴”、C#对java的“借鉴”、最近的几个例子就是“借鉴”Flash设计的SilverLight,Vistual Studio Team System对其他厂商(如Rational)的“借鉴”。别人的某一个技术非常的先进,微软马上就会相应成立自己的部门开始研发,可怕的是微软有得天独厚的竞争优势:它的完全集成的产品线!它除了能单独提供这个产品外,还能提供在整个产品线上对这个产品的集成!别的厂商的单个的优秀产品是无法与微软产品序列进行竞争的,更何况微软还有自己的一个杀手锏:操作系统。微软“借鉴”的产品前几版一般都是非常简陋或有各种的问题,但由于微软公司雄厚的资金和技术上的厚积薄发,“突然”有一版的产品的推出吸引了大家,而别家的产品则不幸被逐渐淘汰。根据历史经验,我是有点担心现在的Flash了。
1.2微软技术“集成”的简单回顾
微软的产品系列在开发接口层面是可以互相引用,互相调用功能的,也就是所谓的应用集成,但我认为这是一种是面向开发的应用集成。微软这一设计思想不是最近才产生的,而是可以追溯到很久之前。
从最早的OLE开始微软做出了尝试的第一步,OLE即复合文档技术,我们都记得在VB中调用OLE(例如:OFFICE)来扩展应用功能的例子吧。
OLE
发展来的COM,或者说OLE是COM的一种实现,COM扩展了OLE的概念,在OLE2种正式的引入了COM概念。要注意的是COM只是一项技术,是一个微软提出的基于组件开发的技术标准,COM本身是没有平台限制的,只不过目前为止只有微软对COM进行了最全面的实现。其中最有名的就是ActiveX了,ActiveX可以理解成COM技术的一个实现或商标(OLE也是COM在早期的一个商标),需要理解COM和OLE、ActiveX在概念上的不同。COM可以让对象模型完全独立于编程语言,而在二进制接口层面进行统一,COM对象可以用C++、Java和VB等任意一种语言编写。COM不仅是我们理解的一个dll(进程内),而是可以是多种样式的,也可以是exe(进程外,例如:windows服务)等其他表现样式。ActiveX和OLE的最大不同在于,OLE针对的是桌面上应用软件和文件之间的集成,而ActiveX则以提供进一步的网络应用与用户交互为主,ActiveX的基本思想是:使用ActiveX控件,来构筑包括从包括用户交互、COM的事务处理监视器到Web服务器等所有的一切全部。而后期COM逐渐作为了微软在Internet开发中的主要支持技术。
因此引入了DNA的开发框架,DNA框架中COM的地位举足轻重。DNA是为了应对Internet 的出现而提出的。DNA为了创建一个构造基于Windows平台的应用程序的框架,而这套结构则能够将个人计算机和Internet 统一和集成起来,为开发Internet应用程序提供了框架支持。DNA使用一套公共服务集,如组件、动态 HTML、Web浏览器和服务器、脚本、事务处理、消息队列、安全性、目录、数据库和数据访问、系统管理以及用户界面等,因此开发人员可以充分利用公共服务集,而无须关注底层结构和服务的构造。在COM的年代,所有Microsoft的工具、应用和系统产品都提供公开发布的基于COM的可扩展接口,现在的.net不是也是这个思路吗,只不过COM技术换成了.net而已。在DNA中,所有Microsoft的工具、应用和系统产品都提供公开发布的基于COM的可扩展接口。COM是第三方厂家将其产品集成到Windows DNA中的主要方式。这和我们单位的产品方案设计思路上是不是很接近!只不过微软的产品线更多层面上是面向开发的,而我们单位的产品线是纯粹面向应用的。
再看看Office自动化语言的发展(同样的集成思路):最早是各自为战,excel有自己的EXCEL的宏语言,WORD有自己的WORD BASIC进行自动化。
接着为了解决这种杂乱无序的状态,微软开发了统一的Visual Basic for Application(VBA)。VBA带来的最大好处是开发人员所学的知识在微软的一些产品中可以统一,减小学习曲线。我个人最喜欢的功能是VBA的宏录制功能,太棒的功能,大大减少了学习VBA的困难。
但VBA做到的只是局部统一,即只能在Office产品线中进行统一。而现在出于战略的考虑VBA已经完全转化成了.net,.net核心不仅表现在Office中,在其他不同产品线的产品中都有体现,一统天下了。
总结一下,微软产品的主要优点是它的普遍性,让用户从所谓的网络效应中得益。例如,Microsoft Office的广泛使用使得微软Office文件成为文档处理格式的标准,这样几乎所有的商业用户都离不开Microsoft Office。
微软产品的缺点,微软的产品十分倚赖软件的重用。虽然这样做对快速软件开发是十分有效的,它却导致了不同软件包之间的复杂倚赖关系。这可能导致的后果是,举个例子,当微软的浏览器程序崩溃时,会导致操作系统的GUI同样崩溃。
因此,在学习微软最新的知识之前需要知道这些“新技术”的幕后背景,实际意义的新技术是不多的,大多数时候都是新瓶装老酒,在不同应用环境下不同的包装罢了。在学习.net3.0,.net3.5提出的这些WCF、WPF(SilverLight)、WF、CardSpace新技术时,需要知道微软之前的解决方案存在着什么问题,而这些新技术是怎样解决这些问题的,这也是一种学习方法。
我的体会是不要先入为主地认为什么技术很难,也许内幕思想是简单的,而且是一步一步发展而来的。首先最初的想法可能就是想解决某一个实际问题,在解决第一步所遇到的问题后可能又遇见了新问题,这样周而复始、一步一步深入后经过不同的阶段发展最终成为了现在的解决方案。因此这就是有效学习的方法,从基础开始,随着某个技术发展的各个阶段一步一步学习,明白上一阶段有什么优势、有什么缺点,而下一阶段是怎样解决它的,在解决上一阶段问题后又出现了什么新问题,周而复始。从上而知也就知道了为什么说基础是很关键的、重要的了。
二、VSTS架构师培训
2.1 Session1 SOA平台体系架构
2.1.1长尾理论
首先讲了一下长尾理论(The Long Tail),好像现在所有微软的讲师都离不开这个话题!我觉得这更像是一个企业经营观在互联网时代的改变。在互联网时代出现了许多非常规的传统企业,例如:eBay、亚马逊和中国的当当等,它们和传统的企业有很多不同的地方,比如:沃尔玛超市,在eBay、亚马逊这样的企业中,最大的不同在于他们都采用了网站来作为主要服务手段,采用了大量的B2B、B2C技术,而在这些网站中可以列出几乎所有的产品,比如在网站上可以列出几乎所有的CD产品,而列出所有产品的成本仅仅是在数据库服务器中增加了一些比特而已,这是传统超市、商家无法做到的,传统的商家的经营都是根据2/8原则进行的,在超市的货架上都是放的最畅销的20%的商品,这样可以商家得到最大的利润。
统计结果后所有的CD几乎都是有人购买的,这样形成了一个长长的尾巴,也许每张CD只有几张的销量,但汇总起来这个长尾巴居然会占到总销量的1/3。这就是长尾理论,更多的是在新的商业环境下诞生的一种经营理念。长尾理论是和一个概念联系在一起的,那就是“平坦的世界”。
2.1.2 SAAS和S+S
SAAS
即SoftWare as a Service,这又是一个“平坦的世界”里概念的体现,可以参见《世界是平的》这本书。以往许多软件公司都是以大型客户为服务目标的,这些大型客户(公司)能得到最先进的软件和最令人满意的服务。但在一个平坦的世界中,中、小型客户也许也能得到和以往大型客户所能得到的所有服务,这是归功于互联网和宽带的信息“高速路”这些科技的发展和普及。
而SAAS就是在这其中一个经营理念的改变。SAAS不同于以往的软件经营方式,以往的软件大都是以License方式来销售的,比如我们花钱购买一份软件的复制(CD盘),而SAAS则完全不同于这样的方式,它是以服务来代替传统软件,用户可以不用购买CD盘方式的软件,而在互联网上直接使用ISV提供的服务,这些服务一般都是以网站的方式提供的,用户只要能上网就可以使用这些“软件”,而SAAS所能带来的更大好处是用户可以不用再自己购买服务器和相关的系统维护人员,而可以直接使用ISV提供的服务,节约了大量的后期成本。比如:2002年成立的SalesForce.com网站为用户提供CRM托管服务,在短短几年时间内已经成为了一个年销售几十亿美元的超大型公司。再比如Google推出的在线OFFICE,用以和微软的拳头产品OFFICE进行竞争。而2006年底微软最新推出的Live战略也是基于这个目的。
这种方式的缺点也是显而易见的,SAAS采用了数据托管的方式,即客户可以将自己的数据全部放在ISV提供的服务器上,这会引起客户数据安全方面的担忧。
但不管怎么说,我觉得SAAS代表了目前软件开发方式的一个方向,它的最大特点
SaaS
的特点:软件部署为托管服务,通过
Internet
进行存取
。同时
SaaS
和开源软件是密不可分。
S+S
是微软提出的基于SAAS的理念,S+S即SoftWare + Service,它不同于传统的SAAS,我觉得这是微软为了保持微软现有产品系列的竞争力而采用的一种策略,如果SAAS成为了以后软件开发的标准,这会终结客户端软件的存在,那么微软现有的产品优势就荡然无存了,而这是Google等新贵公司所愿意看到的。微软认为光有服务是不够的,而应该是软件+服务才能更好的为用户服务。为什么微软会一再提出软件的重要性,因为软件需要运行在操作系统上,只要操作系统还会在未来的开发中占用重要的地位,那微软的未来就不用太担心的。(我个人的理解而已)
可以看看微软所说的“SoftWare”包括什么:
首先,近十年来微软最大的赌注.NET仍然是微软所仰仗的支柱;
其次,.net3.0新推出的WCF成为微软的SOA方面的实现基础;
其三,以WPF以及Silverlight为代表的新一代用户体验技术构成了S+S中新的用户接口模型;
其四,微软Office已经成为商业中不可或缺的基本应用软件,另外微软推出的VSTO给微软Office的应用和整合提供了更加完备的技术集。(需要注意的是VSTO在微软的整体战略中是占有了比较重要的地位,最近几年有很多应用的前端都是完全基于Office开发的)
微软公司的一名资深员工在接受记者时曾经说过这样的话:SaaS并不能终结客户端软件,比如Salesforce实际上是提供客户端软件,Google的SaaS应用也需要安装客户端软件,所以SaaS只是一种想象中的软件在线订阅模式,而SOA更加集中在Server端技术和服务整合上。微软的S+S是指整合“服务+客户端+服务器端”,只有微软才能提供这个最完整的整合服务,因为微软在这三个领域都很强。
微软的S+S是指整合“服务+客户端+服务器端”
,可以看出微软的S+S战略其中已经包含了服务器端的SOA整合。
最后需要说明一点,到目前为止的微软S+S实现和微软的一贯策略一致,是不能跨操作系统平台的。
待续