全部博文(247)
分类: 信息化
2014-04-03 21:19:04
第一部 企业级程序设计需要一套技术规范,了解一下两大阵营
一. J2EE与.NET平台优劣比较(看看其中我们学过了哪些内容?) 在表现形式上,J2EE是一组规范,而.NET更象是一组产品。但它们的目的都是为了企业应用提供分布式的,高可靠性的解决方案.它们在架构上有着很多的相似之处,下表是一个简单对照:
J2EE平台的构成 EJB - J2EE 中间层,完成商业逻辑; JAAS - J2EE 处理认证和授权的API; Java Connectors - J2EE 用于连接异种数据源的API,对上层来讲是透明的; JSP, Java Servlets - J2EE的表示层技术,用于生成用户界面; Java Virtual Machine - Java 语言运行环境; JDBC - J2EE数据库访问; JMS - J2EE的异步消息队列; JNDI - J2EE的名字查找API,独立于目录服务器; JTS - J2EE用于处理交易的API; RMI/IIOP - J2EE的分布式对象的通讯API,提供了和CORBA交互的能力。
.NET平台构成 .NET Framework - .NET应用运行的基础; IL (Intermediary Language) - 所有的.NET语言首先被编译成该中间语言,然后在CLR中运行; SOAP - 用于服务访问的工业标准; DCOM - 组件间通信协议; MS-DTC - 用来在.NET平台上使用两阶段提交协议来处理分布式交易; CLR - .NET应用的运行时环境; COM+ - .NET的中间层模型,用于构建商务逻辑; ADO.NET - .NET 对数据访问的API。 此外.NET平台还包括其他一些产品象Application Center Server,BizTalk Server ,NLBS (Network Load Balancing Service),Commerce Server,Enterprise Servers,HIS (Host Integration Server),ISAS (Internet Security and Acceleration Server)用来提供象防火墙,安全访问,B2B交易,负载平衡等服务.J2EE规范本身没有定义这些服务,但可通过选择第三方产品来满足类似的要求。 二.技术比较 1.一 vs 多 一种语言vs多种语言,一个平台vs多个平台.这似乎是大家最喜于津津乐道的话题,也似乎是所有问题的焦点。 两种平台主流的开发语言Java和C#在架构上有着惊人的相似:虚拟机技术,基于沙箱的安全模型,分层的命名空间,垃圾回收等。所以从第一眼看上去,C#简直就是Java的克隆。但微软并不这样认为,微软的说明是:“它集成了C++, Java,Modula 2,C和Smalltalk等多种语言的精华,对它们共同的核心思想象深度面向对象(deep object-orientation),对象简化 (object-simplification)等都一一做了参考。”一方面,C#的大多数关键字来源于C++,使它在书写上有别于Java。但另一方面,C#的严格的类型转换等概念却明显来自于Java(当然,它的原始类型的定义更严格,并且据微软声称没有影响到效率.),使其在内涵上有克隆之嫌.但即是Java,其有些特性也和Smalltalk颇有渊源.所以评价一种开发语言的优劣不仅是看其外在的表现形式,更重要的是其实实在在的功效.作为一种新语言,C#加入了基于XML的标记,可以被编译器用来直接生成文档,C#的另一个特点:一站式软件(one-stop-shopping software)强调了自解释( self-describing) 的编码方式,即头文件,IDL(Interface Definition Language),GUID和其他复杂的接口无需再被引用.也即是C#,VB.NET等代码片断可以任意的被加入到其他语言中.这无疑在多种语言混合编程的模式中是一次飞跃,但是,其难维护性也是不言而喻的。 微软的.NET的平台提供了象C#,VB.NET,COBOL等多种开发语言,C#是新的,而其他的每一种语言都是在原有的基础上改造而来.这是微软煞费苦心并且也是不得以的要为习惯于这些语言的程序员铺一条便捷之路.但是,这些语言的改造与其说是整容到不如说是一次开膛破肚的大手术.首先是观念变了,Basic,Cobol等语言先天的缺少面向对象的内涵,现在却变成了面向对象的语言,这就不是要求其传统的程序员仅仅熟悉一些额外的关键字那么简单的问题了.基于面向对象的软件分析设计开发测试是完全不同于基于传统过程性语言的质变,所以这一过程的转变对传统程序员来讲也是一个痛苦和漫长的过程.在传统程序员面前,微软看似提供了丰富多采的解决方法,但对于实际问题而言,却怕是有些力不从心.所以一个简单的办法是:直接使用C#.对于独立软件开发商来讲,其转换成本不容忽视.其次,在一个软件项目中使用多种语言,开发商必须同时拥有多种语言专家和多个独立的难以互相支援的开发小组,无疑的,这也使其软件的维护的成本已非线性的曲线增长.多样性是双韧剑,实施时需仔细斟酌. 跨平台是J2EE的最大卖点,也是至今为止还绊住微软的栅栏.当开发商完成了符合J2EE规范的软件时,其客户可以依据其喜好和实力来选择不同应用服务器.从基于open source的免费软件到高端满足B2B需求的商业套件来搭建自己的平台.但是由于J2EE的规范还不完善,各个J2EE服务器的提供商为了使其提供其各自理解的完整的功能,不得不添加一些额外的特性.这就使得使用了这些特别功能的应用软件,绑定到了特定的应用服务器上.随着J2EE规范的发展,这种差别会逐渐减小. 微软的跨平台解决方案是Web services,它解决的是异种平台上不同应用之间的连通性问题.从技术角度讲,它除了以XML为介质之外没有什么新意.但它的重要意义在于:它是微软这样一个重量级选手所推出的,前景不容小视.构造和使用 Web services 的过程较为简单: 服务提供者用他所选择的语言构造服务; 服务提供者用WSDL(the Web Services Description Language)来定义该服务; 服务提供者在UDDI (Universal Description, Discovery, and Integration )中注册该服务; 使用者的应用程序从 UDDI中查找已注册服务; 使用者的应用程序通过 SOAP (the Simple Object Access Protocol )来调用服务.(SOAP使用HTTP来传递基于XML为表现形式的参数) 正如我们所讨论的: Web services解决的是异构平台上服务连通性的问题,但在现实中所更迫切需要的是如何在异构的平台上构造具有可扩展性,高可靠性,高可用性,故障冗余,错误恢复能力的企业应用.缺少这一点,从结构上讲,.NET平台还远未完善. 2.中间层 基于组件的软件开发技术可以在较高的级别上实现软件复用,加快企业软件开发的进程.在J2EE构架中, JavaBean和EJB(Enterprise JavaBeans) 被用来完成事物逻辑.其中EJB和JavaBean 有着类似的模型,但它被用来创建分布式的企业应用.它定义服务器端组件的模型,具有以下一些特性: 生存期模型; 访问模型; 安全模型; 事物处理模型; 会话处理模型; 数据封装模型; 部署模型 根据这些模型,简单的编码就可完成复杂的功能。 在微软的.NET平台中,旧的COM 和 COM+的组件模型被新的组件模型所代替。增加了象基于沙箱的安全模型和垃圾回收等功能.并且实现了多重接口继承,扩展的元数据和新的代理模型等.旧有的COM和COM+组件也可被映射到新的运行环境中。 综上所述,两众架构在基于组件的中间层的设计上各有千秋,对于创建分布式的,复杂的,高效的,高可靠性的的应用程序都有着足够的能力。 3.表示层 两种架构都同时支持胖客户端和瘦客户端.即C/S模式和B/S模式.对于C/S模式,J2EE提供了替代Java AWT的Java Swing,同时作为可视化组件的JavaBean也可用来构造系统。对于B/S结构的表示层,J2EE使用 servlet ,JSP(Java Server Page) ,HMTL,WML,XML等工具来实现。 微软的胖客户端技术则由 Windows Forms代替了MFC.它们起的作用相同,在结构上 Windows Forms 被插入到.NET的运行时框架(runtime framework)和组件模型 (component model)中.在瘦客户模型中, ASP.NET代替了旧有的ASP和 HMTL, WML ,XML作为表示层。在 ASP.NET中,C#,VB.NET等语言的代码片断可被自由引用.ASP.NET 页面被首先转换成中介语言( Intermediary Language),然后再被 中介语言及时编译器(just-in-time IL compiler)编译,最后运行于公共语言运行环境中,并且 ASP.NET 提供了页面的缓冲,所以,其运行速度要远远快于ASP。 大体上,两种架构所使用的表示层的技术非常类似,虽在细节上各有所长,但总体功能当在伯仲之间。 4.数据访问 J2EE 和 .Net 已不同的形式支持数据的访问。JDBC和ADO一样和所连接的数据库无关,并且通过连接,命令语句和结果集来对数据进行操作.所以属于中间层次的 API.更高一级的数据封装和数据管理是通过实体EJB (entity EJB)来完成的.基于容器管理的实体EJB使开发更快捷,管理更方便.事实上,由于实体EJB的load()和store()方法的同步机制,将大大缓解因并发而使数据库产生的瓶颈.也可以采用不属于J2EE规范的第三方数据访问工具,象WebGain的 TopLink。 而微软的.NET的数据访问工具则由基于XML的ADO.NET代替了基于COM组件的ADO.任何以XML为输出的数据源都可以作为 ADO.NET 的数据源.相应的结果集升级为数据集 (DataSets),命令语句则升级为数据集命令(DataSetCommands).从形式来看,微软的ADO.NET更新潮和时髦一些,基于XML的特性使其可以处理极其丰富的数据源,并且,因其构架在HTTP协议之上,易于穿透防火墙,使沟通更为便利.但由于XML本身的基于标记的特性,很明显限制了在有超大数据量和有网络瓶颈的应用中的使用.而J2EE的数据访问规则则显得略有单薄,但同时却更简单,更有效.并且通过对应用程序有效的层次的设计,对于数据库和基于XML的数据源的访问,也是可以无缝的整合的。 三.整体评价 在微软还没有足以和Java平台相对抗的产品的时候,微软所乐于做是大声的宣传:"write once, debug everywhere"。而它的对手则更乐于这样评价它:"微软开始也喜欢Java,他们喜欢它的方式是让它死去,他们当然也憎恨它,他们甚至憎恨每一个以J开头的单词。"但是现在,形式不同了,微软有了足以自豪的.NET他们可以已他们自己所喜好的方式来对J2EE和.NET来做各种比较。最热闹的应该算是微软出示的第三方对.NET Pet Shop和J2EE的 Pet Store的综合比较了.有兴趣的读者可以到MSDN,,IBM开发者原地等网站看到相关评论。
就企业而言,内部众多系统的整合、系统的延展性、安全性是更需要注意的议题,而这些都是J2EE的优势,也是微软的不足处。 在效率方面,J2EE阵营主张通过硬件的效能增加来弥补软件的不足.开放标准,功能强大,易于移植这些都是J2EE的卖点。但让人奇怪的是IBM的WebSphere和BEA的WebLogic在J2EE市场占了大半壁江山,而作为规则制定者的SUN却在做壁上观。 微软确实提供了从桌面的办公软件,开发工具,到后台服务器数据库的全方位的产品。 但统一平台的使用者可能要牺牲跨平台的好处,并也有可能由此就被无穷无尽的锁定在微软的许可证的汪洋中.更简单,更快捷,更高效是微软的目标,随着时代的发展,我们也许会看到更完美的技术解决方案。
.NET来自于微软,是一套全能的框架平台,支持C++、C#、J++、VB、ASP等语言,能够解决C/S、B/S和单机等结构的软件开发需求。.NET平台将这些语言编译成CLR语言,使它们可以无差别的运行在.NET Framework上,是2000年以后微软最为重要的软件开发套件产品。.NET框架入门门槛较低、使用方便,并且微软对其提供了良好的文档支持和在线服务,目前已经拥有了一大批使用者和拥护者,也为很多程序员创造了良好的就业机会。 准确来说J2EE并不是框架,而是许多技术规范的集合。SUN公司1995年推出Java语言,其先进的理念、优美的语法、完善的面向对象思想、强大的语言特性、对微型设备和网络的良好支持,使得Java语言受到了世界上很多程序员的喜爱,并逐渐成为了世界上最受欢迎的程序开发语言。直到今天,Java语言一直是世界上程序员使用得最多的语言,各大语言都渗透到各个领域,并找到适合其发展的土壤,相信几年内这个排名不会被改变。随着经济发展,大型的分布式系统,远程协作访问系统,电信金融等行业软件企业软件需求越来越大,SUN公司不失时机的组成了JCP组织,通过联合世界上一些先进的软件公司和技术领导者,来定义JSR规范,逐渐形成了以Java语言为核心的J2EE技术群,已经推出近300项规范,涵盖软件开发的各个方向,大有做到无所不包之势。由于参与制定规范的公司,譬如IBM、富士通、BEA、ORACLE等公司技术实力雄厚,并且对规范都提供了软硬件支持,这些支持都是企业软件开发领域的支柱级作品,加上其平台无关性及开源作品繁多可选择性较强等特点,使J2EE阵营一直处于领先地位,有效的避免了出现一家独大的现象,使这一领域一直处于良性竞争的态势下,发展迅猛。在觉察到J2EE这一支奇兵出现的后,微软推出了.NET Framework,欲与之抗衡,但一直处于下风。 2000年以来关于J2EE和.NET之间的争论从来就没有停止过,这里本人不做定论,只列出他们各自的特点。 .NET: 1. 技术来自于一家公司 2. 支持多种语言 3. 软硬件均需要付费 4. 多数设计模式最佳实践灵感来源于J2EE阵营 5. 仅支持Windows操作系统 6. 无开源社区支持,是以框架开发者为主导的设计 7. 门槛很低,使用方便,学习成本较低 8. 新技术更新较慢 J2EE: 1. 技术来自于多家公司 2. 支持一种语言 3. 开源产品众多,免费框架居多,硬件和中间件需付费 4. 成果众多,相应的最佳实践设计模式层出不穷 5. 平台移植性好,支持所有操作系统,这一方面成本降低 6. 开源社区活跃,很多规范都是一线人员自己做出来的或者大量听取一线开发者的意见 7. 门槛较高,由于多且杂,需要开发人员花费很长时间才能熟悉整个体系 8. 这一阵营技术更新很快,新技术新标准层出不穷,适合技术爱好者 在商业市场上,支持J2EE阵营和支持.Net阵营的开发者约6.5:3.5 注:如何学习J2EE技术 1. 通读规范 2. 看Sample 3. 写Demo 4. 读原码 5. 做项目
第二部分 几个主流商业数据库管理系统
开发数据库应用,选择一个好的数据库是非常重要的。目前, 商品 化的数据库 管理 系统以关系型数据库为主导产品, 技术比较成熟。面向对象的数据库管理系统虽然技术先进,数据库易于开发、维护,但尚未有成熟的产品。国际国内的关系型数据库管理系统有SQL 、ORACLE、SYBASE、INFORMIX和 DB2。从一些方面比较了SQL Server与Oracle、SYBASE、DB2、INFORMIX 这些数据库,为您选择数据库提供一些参考。 这其中,INFORMIX开始逐渐淡出主流行列,而另一个开源RDBMS MySQL迅速登陆,可以关注。
性能
可伸缩性,并行性
操 作简便
较复杂, 同时提供GUI和命令行,在Windows NT和Unix, Linux 下 操 作相同。对数据库 管理 人员要求较高。
使用风险
开放性
易维护性和价格
DB2
数据库二次开发 |