- WinCE Security...
- xdebug配置说明
- VC++ 获取文件的创建、修...
- ASP进度条
- 简单代理服务器C代码实现(S...
- 程序设计竞赛试题选(02)
- 如何在ASP程序中打印Acc...
- UTF-8和16进制区间
- ASP实用技巧:强制刷新和判...
- 运行中程序删除自己的方法
- asp提高首页性能的一个技巧
- [J2EE]J2EE 应用服务器技术
- VB变量命名规范
- C语言常见错误小结
- (摘自网络)如何在IIS中调...
比较 Microsoft .NET 和 J2EE 的构成技术
「.NET」平台到底是什么?
「.NET」架构和 J2EE 有哪些差异?
如果你想得更远一点,你还会有第三个问题:
我们能从「.NET」架构中学到一些哪些有助于推展企业软件开发的思维?
目前,「.NET」架构尚嫩,许多细节仍有待微软的「.NET」小组厘清。虽然如此,我们仍然能够从现有的信息中得到上述问题的解答。
「.NET」平台到底是什么?
现今大家对于「.NET」平台的看法有点类似寓言「瞎子摸象」,观点不同,自有不同的想法。有些人说「.NET」是微软的下一代 Visual Studio 开发环境;有些人说它是一个新的程序语言(C#);还有些人说它是以 XML 和 SOAP 为基础的资料交换与传递讯息的机制。其实,上述三者都是「.NET」想扮演的角色,而且还不止于此。
让我们先得到一些较具体的观念。下面列出「.NET」平台内部的组成:
C# 是一个「新程序语言」,用来撰写类别和组件。C# 融合了 C/C++ 和 Java 的特色,还多了一些其它的特色,比方说 metadata tag。
一个「通用语言的执行时期系统(common language runtime)」,用来执行 IL 格式的程序代码。任何语言的原始程序只要被编译成 IL 格式之后,就可在「.NET」平台执行。
一组「基础组件」,提供多样的功能(例如:网络),以供执行时期系统使用。
「ASP+」,是新版的 ASP,能让 ASP 被编译成 IL 的格式。
「Win Form」和「Web Form」,是一组新的 UI 组件骨架,供 Visual Studio 使用。
「ADO+」,是新版的 ADO,使用 XML 和 SOAP 来进行资料存取和资料交换。
「.NET」和 J2EE 有哪些差异?
如你所见,「.NET」平台是一堆技术的组合。微软把这些技术当作现有技术(例如:J2EE 和 CORBA)的另一种选择,但实际上比较起来又是如何呢?下面是我们的一些分析比较:
Microsoft.NET | J2EE | 主要差异 |
C# 程序语言 | Java 程序语言 | C# Java C# |
「.NET」通用组件 | Java core | 高阶的「.NET」组件将支持透过 |
Active | Java | ASP+ |
IL 执行时期系统 | Java 虚拟机器、CORBA | 「.NET」允许不同的程序语言使用 Java CORBA |
Win Form 和 | Java Swing | 类似的 Web 组件在标准的 MS |
ADO+ 和 | JDBC、EJB、JMS | ADO+ |
上面是各项技术的比较,下面是两者的整体比较:
特色:「.NET」和 J2EE 都提供许多相似的特色,虽然方法不见得完全一样。
可移植性:「.NET」只能在 Windows 上运作,但是理论上可以支持许多语言。而且,「.Net」支持 SOAP,使得不同平台的组件可以和「.NET」的组件交换讯息。虽然「.NET」中有些技术(比方说 SOAP 和其 discovery 与 lookup 机制)是公开的规格,核心的技术(比方说 IL 执行时期系统、ASP+、Win Form 与 Web Form)都还是由微软所把持,而且微软将会是「.NET」完整开发工具和平台的唯一提供厂商。
J2EE 则可以在任何有 JVM 的平台上执行,只要有兼容的服务(比方说:EJB 容器、JMS 等)即可。J2EE 的一切标准都是公开的,许多厂商都提供兼容的产品和开发工具。但是 J2EE 是一个单一语言的平台,如果要和其它语言平台沟通必须透过 CORBA(目前 J2EE 平台上不见得有支持 CORBA)。
整体来看
上面的各项分析指出「.NET」和 J2EE 的主要差异。微软正在「.NET」上做两件值得注意的事:开放「.NET」给其它程序语言的使用者,并开放「.NET」给非「.NET」组件的使用者(透过 XML 和 SOAP)。
因为「.NET」允许其它语言的组件整合进来,「.NET」赋予 Perl、Eiffel、Cobol 和其它语言的程序员在微软的平台上做事。各种语言的爱好者尤其喜欢这点,因为他们中多数人才不在乎微软和 Sun 以及开放阵营之间的战火。
大家的反应如何?
对微软的程序员来说:
如果你一直守着微软的架构,那么「.NET」的出现是一件好事。ASP+ 比 ASP 好;ADO+ 比 ADO 好;C# 比 C/C++ 好。「.NET」平台差不多要到 2001 才会现身,所以你还有时间准备。毫无疑问地,它将会变成微软预设的开发环境。如果你现在正在使用微软的开发工具,未来移转到「.NET」之后,你也会享受到这种种好处。
然而,「.NET」平台的一些目的太过崇高,不保证能达得到(至少短期内是如此)。比方说,IL 执行系统有一些很明显的难题待克服,想整合进此系统的每个语言必须清楚地定义如何对应到 IL,以及 IL 所需的 metadata。某语言要兼容于 IL 来必须提供编译器(x 语言转 IL,和 IL 转 x 语言)。
这有前例可寻。有许多编译器可将非 Java 语言转成 JVM 可执行的程序,这些语言包括了 JPython、PERCobol、the Tcl/Java project,有趣的是,连 Bertrand Meyer 和一些 Eiffel 语言的家伙也早在几年前就做出 Eiffel-to-JavaVM 的工具。其中只有 JPython 是成功的,其它的工具好象都没人在用,甚至连这些语言本身的族群都不用,虽然这些工具的出现使得他们能使用最爱的语言来写 Java 程序。为什么就是无法引起大家的热诚?我相信这是因为人们怀疑混合两种异质的语言环境会水土不服。如果他们想写在 JVM 上执行的程序,他们宁可花时间去学 Java 语言。我想,同样的情况也会出现在「.NET」平台上,人们宁可花时间去学 C# 来写「.NET」程序,而非使用其它语言。
还有一点要注意的:「.NET」使用的 SOAP 架构的性能值得观察。SOAP 使用 HTTP 来传递 XML。HTTP 不是有效率的通讯协议,而且 XML 还需要额外的文件剖析(parse),这又是计算上的负担。两者的结合会使得交易的速度大大低于其它方案。XML 是一个用途广、健全、又具涵义的讯息机制,而 HTTP 是一个广泛又能避免许多关于防火墙的问题,但是如果效率对你来说很重要,那么你应该多瞧瞧其它的方式,而不要用 SOAP。
对 Java 和 Open Source 族群来说:
「.NET」很容易被视为微软基于市场需求所推出的解决方案。其实,「.NET」是微软开始策略改变的征兆。以往微软在面对其它架构和平台有不错的战果,现在他们面对了来自 Java 和 open source 的压力,开始有了「开放」的迹象,也试着直接去满足程序员的需求,这可是和以往的老大作风大不相同。如果你是 Java 或 open source 的爱好者,请注意:这场战争的本质已经有所改变了。
而且,微软的 IL 执行时期系统有一点值得注意的目标:消弭程序语言和 API 之间的藩篱。Java 消弭了平台间的藩篱,但是如果你想使用 J2EE,你就必须搭配 Java 语言。「.NET」想让你使用你喜爱的语言来开发「.NET」程序,这点是很了不起的(但结果是否会成真仍是个大问号)。从这点来看,J2EE 就比不上「.NET」,但是这点应该不算太重要。
J2EE 如果想迎战「.NET」,有几个议题应该立刻被注意到。首先,J2EE 应该将 XML 好好地整合进来。我不是指制定 XML SAX/DOM 的 API,也不是指拿 XML 当作设定档格式,我说的是 XML 的讯息交换和处理应该被加进 J2EE。当然,目前你可以用 XML 格式当作 JMS 讯息内容,但整个 J2EE 却不会因此受益。XML 是一堆标准的集合,包括业界标准的 API 和 DTD,这应该都是资料交换时可以享受到的好处才是。
但是微软把赌注下在 SOAP 上,而且正积极地将 SOAP 的相关信息传送给程序员。J2EE 也应该如此,我想到的方法之一是在 JMS 上加一层 XML messaging provider,并整合进 Java Naming and Directory Interface(JNDI)和 LDAP、NIS、COS Naming 等技术。这样就等于是结合了 SOAP/BizTalk provider、ebXML provider 等技术。