技術架構評估
--主要對Java、Dotnet等技術進行綜合評估weide2005 年 12 月17 日
在本文中我們將根據一個業務需求對當前流行的幾種技術架構進行評估。
這篇文章的目的不是為了評價各種技術架構在單項指標上的優劣,僅僅根據我們描述的業務需求做出選擇。同時,強烈希望大家發表自己的意見和建議,幫助我們做出這種選擇。
業務場景描述這是一個經典的業務場景,其核心問題是:作為一家行業軟件提供商,要形成自己的
企業應用框架[6],并在該企業應用框架上搭建行業的整體解決方案。
現狀:經過多年的積累,我們形成了一個系列的行業軟件產品,從幾個方面分別描述如下:
- 滿足的業務需求: 服務于企業質量管理這一行業,同時為滿足不同的業務需求,產生了相應的多款產品
- 使用的數據庫: SQL AnyWhere、SQLServer、Oracle
- 開發語言(工具): PB、VC、Delphi、Dotnet(C#)、Java(JSP)
- 發布形式: 核心業務仍以C/S為主,最新的項目根據企業需求也用Dotnet/Java實現了少量B/S應用。最終的產品線將會是B/S、C/S共存,包括單機版、網絡版;標準版、定制版本的產品系列。
- 經營模式: 定制開發與標準版軟件升級并行,在標準版的基礎上進行定制,同時把適用于多數企業的新功能合并到標準版中來。
- 用戶數許可規模:當前的數量級為N*10,可預期的上升空間為幾百到幾千。所以對應用服務器、并發等性能要求不算太大。
目標:
將這些不同語言開發的,擁有不同發布形式,但卻服務于同一行業的單個軟件,統一到一致的技術架構下,并增加B/S發布模式的支持。最終形成B/S與C/S相結合的產品系列,形成行業的整體解決方案。
舉例描述:首先用Java(或C#)搭建企業應用框架,該框架包含認證/權限/組織角色管理、文件管理等通用性的功能。然后在該框架的基礎上把現存
C/S版的--PB實現的財務管理系統,Delphi實現的庫存管理系統,VC實現的局域網即時通訊系統的業務功能模塊全部用Java或(C#)重寫,并
增加B/S版本的實現。
統一到一致的企業應用框架下,形成統一、規范的開發方式,使得我們不用再去維護多個技術團隊;通過一致的企業應用框架,建立積累機制,逐步形成并完善整個系統的業務功能。
評價方法
根據上述業務場景的目標,我們根據如下幾個因素進行評價,同時希望得到大家的意見和建議,最終將在這些數據的基礎上形成一個綜合性的評估結論。
社區文化
開發語言流行程度
技術體系和思維方式
成本
學習曲線
社區文化Python和Ruby從技術角度也能夠滿足我們的要求,但由于在國內太“小眾”,缺乏相應的技術支持和客戶基礎,現階段不被考慮。Java和dotnet目前都擁有活躍和為數眾多的開發社區,我們能夠獲得足夠的交流空間和技術支持。
Ruby
知道Ruby是因為Ruby on Rails,一個相對較新的 Web 應用程序框架,構建在 Ruby 語言之上。它被宣傳為現有企業框架的一個替代,而它的目標,簡而言之,就是讓生活,至少是
Web 開發方面的生活,變得更輕松。
但是,對于Ruby實在生疏的厲害,雖然知道也有相關的GUI庫,但如果拿它來做一個系列產品,可能人手都找不夠。基本沒有交集,資源不列舉了。
Python
Dotnet
Dotnet最大的社區是MSDN Home?MSDN中文網站擁有無數的中文Dotnet技術資源,這也是國內相比Java的一大資源優勢。
Dotnet社區,其中最受關注的是多是關于控件以及和技術關系不是太大而在非技術上很有爭議的隨筆.在java社區已經普及的面向對象以及模式的概念,在.net社區鮮有提及.
在cnblogs的情況稍微好些. 不過通常局限在運用面向對象和模式來解決一些示例性的小問題.這樣層次似乎太低了,這離企業級的應用差的還比較遠。
[4]Java
Java由于時間的積累,項目的積累,社區資源多多。很多在實踐第一線的開發人員、架構師活躍在各個社區之中。由于社區文化的不同,Java社區有N
多技術先行者,并樂于把自己的開發經驗分享給整個社區。而Dotnet由于時間尚短,在這方面相對較差。
Java開源產品多,面臨的選擇多,各開源項目文檔充分程度各異,且文檔又多以英文為主:( 好在國內的Java牛人自發組織了文檔的翻譯
[5],并樂于分享自己的學習體驗,這種方式對于技術的提高又有很大的幫助。
英文
TheServerSide.com http://www.theserverside.com/tss
http://java.sun.com
http://www.javaworld.com
中文
BlogJava http://www.tkk7.com/
Java視線論壇 http://forum.javaeye.com/index.php
Matrix http://www.matrix.org.cn
J道-專業的Java解決之道 http://www.jdon.com/
Java愛好者http://www.javafan.net/index.jsp
BEA dev2dev 在線 http://dev2dev.bea.com.cn/
IBM developerWorks 中國 http://www-128.ibm.com/developerworks/cn/java/index.html
http://www.javaresearch.org Java相關技術綜合服務網站
http://www.javaworld.com.tw/jute/index.html
開發語言活躍程度我們將引入兩個排行榜,來評估開發語言的活躍程度和受歡迎程度。
TIOBE程序語言使用排行榜
下面列出2005年11月排行榜,最新排行請參考
官方網站[1]。
近日來,在TIOBE程序員社區中公布了其2005年11月的程序語言排行榜。這得注意的是PHP即將超過C++成為了排行榜的老三!而Java作為開源先鋒首當其沖的成為了龍頭老大,并且仍然保持著很好的增長勢頭。
這個排行榜每月更新一次,其排名順序按照世界范圍內的技術工程師、講師、第三方廠商的調查依據,并查詢了目前流行的搜索引擎:Google,MSN,
Yahoo,結合前兩者的數據計算后得出的。根據TIOBE的觀點,此排行榜是被程序員們用來檢查自己的程序技能是否過時,或者作為建立新的軟件系統時進行參考之依據,并非意味著哪種語言是最好的。
圖 1. 2005年11月TIOBE發布:世界前20位語言排行榜
圖示說明:
(Position):此列表明當前語言與去年位置的變化。
Ratings:在查詢搜索引擎計算排名順序時使用了 '+" programming" -tv -channel'公式,對上12個月內Google,MSN,Yahoo!和Google新聞組的數據進行查詢。注意此公式應用于標準的Google
web點擊率、標準的MSN web點擊率、標準的Yahoo!web點擊率和標準的Google新聞組點擊率。這里的“標準”意味著一次對前50位語言web點擊率總和的查詢是均勻分布的,即保證了排名的相對公正性和科學性。
(Ratings): 此列表明當前語言在上12個月內的排名變化。
Status:帶有“A”的程序語言被認為是主流語言。帶有“A-”和“A--”表示程序語言位于“A”和“B”之間。從支持能力的觀點看,盡量在工業的、任務危機的軟件系統中使用帶有“A”的主流程
序語言。如果某種語言在上3個月內具有超過0.7%的增長率,則此語言將獲得“A”狀態。上兩個月內具有超過0.7%的增長率的程序語言相應的將獲得“A--”和“A-”狀態。
圖 2. 2005年11月TIOBE發布:世界前10位語言在前五年內長期發展趨勢圖
sourcefage開源項目所用語言排行榜
SourceForge.net,全球最大的開放源代碼開發網站。對各個開發語言的開源項目統計,最新信息請訪問
官方網站[2]。
以下列出2005.11.25數據,Java超過C++成為Sourceforge第一語言
1. Java (16738 projects)
2. C++ (16731 projects)
3. C (15934 projects)
4. PHP (12175 projects)
5. Perl (6209 projects)
6. Python (4542 projects)
7. C# (2892 projects)
8. JavaScript (2779 projects)
9. Visual Basic (2192 projects)
10. Delphi/Kylix (1926 projects)
11. Unix Shell (1845 projects)
12. Assembly (1608 projects)
13. PL/SQL (1145 projects)
技術體系與思維方式
在同樣滿足技術期望目標的情況下,Java和dotnet的體系結構越來越近似,因此對于Java和dotnet架構的比較沒有太大意義。
二
者最大的區別是社區文化:Java是由各大公司一塊兒制定規范,開源產品多,發展迅速,同時開源產品有些過多了;dotnet基本由微軟控制,底層技術不
開放,但是對第三方軟件開發商而言,也很友好,因此現在已經有眾多的軟件公司提供dotnet下的組件--這一點很類似于Delphi。Java由幾大
IT公司共同制定和維護其規范,有著可選的若干方案;Dotnet由于微軟的強勢地位,只能是一支獨秀的局面。其它公司采用
Dotnet開發產品,若微軟也要插一腿,則其它公司很難競爭得過,最終難免衰敗(Borland?)。比如金蝶最早準備用.net,現在改Java了
(?)
給
個形象的比喻:走入Dotnet的世界,MS既是Dotnet世界的王,Dotnet世界規則的制訂者,它就像太陽照亮了廣闊的空間,大家除了仰望,誰能
與其爭輝?Java世界,則是一個誰都能閃爍光芒的地方,能量小的是螢火中,能量大的就是恒星啊(IBM?BEA?)。
轉貼兩篇
C#
vs. Java:相反的思維方式 (譯文):
Conflicting
mindsets of C# vs. Java,Malcolm Davis,September 12, 2004
我最近受邀對 C#/.NET 和 Java/J2EE 做一個對比。一開始,我比較了它們的功能特性、產品、技術,然后我發現
C# 和 Java 的戰場并不在這些表面特征方面,而是思維方式層面的競爭。
坐在辦公電腦前,開發者腦袋中按兩種相反的思維方式看問題:
1.接受桌面上已有的工具并以此為標準。
2.經常的搜索能夠提高工作效率的機會。
接受主義與探尋主義是兩個社區的主要思維方式差異。什么是對開發者有益的,接受主義者放棄了對工具的控制,接受經理和賣主的選擇。探尋主義者搜索、尋找正好對他們工作有用的工具。兩種思維方式都有其正面因素和反面因素。
工具的探尋(包括 IDE,組件,工具等)是正常的、預想的、首選的行為。作為開發者,應該尋找適當的途徑,比如新的程序、自動生成重復的代碼以及組件重用等途徑,提高工作效率。可是,這對于一個
IT 公司來說,可能是一個不好的兆頭。很多的 IT 公司限制隨意安裝新的軟件,很多公司限制對外部網站訪問,有的還限制對新聞組和
blog 站點的訪問。(當然,很難想象有些 IT 公司甚至不允許訪問 weblogs.java.net。)這些 IT 公司有很多適當的理由,比如對病毒、木馬軟件傳播的擔憂,以及由于缺少許可證而導致的法律問題,很多程序員并不清楚也并不關心引進新軟件可能帶來的這些后果。
四年前,我向一家 IT 公司引進了 Ant,Tomcat 和 JUnit,這些工具簡化并加快了 web 編程、測試以及制造的過程,極大的提高了公司的生產效率。現在幾乎每一個
Java 開發者都已經掌握了這些技術。
NAnt 和 NUnit 是僅有的一些開源的、對 Java 工具集的 .NET 移植。然而,Microsoft 并不是采納這些已有方案、加以改進、并將它們集成到生產線中,而是自己重新創建了類似的產品
Visual Studio Team System。停下來想象一下,會不會有哪家 Java IDE 會聲稱“我們將不會支持
JUnit 或者 Ant,我們將推出我們自己的產品。”這簡直是不可想象的!你現在知道 Java 和 .NET 之間的思維差異了吧:一個采納社區已有的成熟工具,另一個則重新創造一套集成的方案。因為商業
IT 公司偏愛集成的解決方案,Microsoft Team System 給人感覺不錯。可是,Team System 只是一個落后時代大約
5 年的產品。
商業世界的人們已經開始使用 Jakarta 項目上發布的 Ant 和 Tomcat。思維方式凸現了商業運作和 IT 開發的主要差異。如果商業軟件能夠遵守和
IT 開發相同的規則,它們將壓縮競爭對手的空間,同時失去他們最好的開發人員。
由于 IT 公司需要以應用程序提供商(Application Service Provider, ASP)的等形式采用外部資源,Java
以及 Open Source 將成為 IT 的主流。Microsoft 的做法最終會傷害他們。ASP 的商業模式,將帶領我們進入一個商業軟件開發的新時代。Industrial
strength development techniques, cutting edge technology, 以及經常性的探尋提高生產效率的機會,將成為標準,我們將看到“小魚吃大魚”的一幕,我們將看到
Java 吃掉 .NET 的午餐。
Conflicting
mindsets of C# vs. Java: Part II,Aaron Hohnson,September 21, 2004
大家都看到了 Malcolm Davis 剛剛發表的那篇“C# vs. Java:相反的思維方式”了吧?你也注意到:sourceforge
上 Lucene.NET 的主持者關閉了項目,帶著他們的玩具回家去了吧?我接著 Malcolm 的話題,說說這兩件事之間的關系。
大體而言,.NET 社區的參與者總是在談論 Microsoft 推出的最新的、最強大的東西:MapPoint Location
Server,SQL Server,Longhorn,ASP.NET 2.0,Visual Studio,所有來自雷德蒙(Redmond,微軟總部所在地)的產品。相反的,Java
社區的程序員在那里談論 JBoss,Hibernate,Struts,Eclipse,這些東西沒有一個來自硅谷。
Malcom 的文章說,.NET 開發者接受 Microsoft 提供的工具和服務,我想這在很大程度上是對的。.NET
開發者很少花時間,開發持續層方案(persistence layers),web 應用程序框架(web application
frameworks)或者緩存解決方案(caching solutions),因為 Microsoft 已經為這些問題提供了
Microsoft 解決方案。但是僅僅是因為 Microsoft 提供了這些工具嗎?那為什么 JSF,JDO,NetBeans
不能成為 Java 技術 Blog 站點的主流聲音呢?拿 ASP.NET 和 JSF 作一個細致的比較,它們并沒有太多的不同,但
ASP.NET 和 Visual Studio 一起被廣泛應用,而 JSF 卻很少人用并且飽受嘲弄。我認為 Malcom
是對的,的確是思維方式的差異早就了這一切。
回過頭來看看 Lucene.NET 的那群人吧:他們為什么關閉了開源的項目,他們為什么不再繼續為這個很優秀的想法貢獻他們的時間和精力呢?或許
.NET 社區對他們工作的反響,讓他們無法繼續維持下去了吧!使用 google 在 weblogs.asp.net 上搜索“lucene”只得到了
17 項結果,而在 jroller.com 得到了 2570 項結果。Lucene 已經存在很長時間了,但 Lucene.NET
的那群人們把東西包起來另起門戶,其中一個原因可能就是:幾乎沒有人關注他們的工作:大家都在忙著研究 SQL Server
的全文檢索,這才是 Microsoft 提供的解決方案(當然,需要為每個處理器花費成千的美元購買許可)。在 Java 世界,Lucene,Struts,Tomcat
之所以繁榮,也是因為為一個大的開源項目工作,給開發者帶來了足夠的威望。而當你投身于一個開源項目,卻很少人注意時,沮喪的你也許也要尋找另外的動力。在
Lucene.NET 這個事例中,money 是他們的動力,所以他們關閉了項目,轉而販賣他們的個人版本和商業版本。他們或許能得到雙倍的美元吧,但我打賭一年以內,不會有多少人談論
seachblackbox.com 的。
那么我的觀點是什么呢?是說 .NET 開發者很貪婪,不關心社區嗎?不是這樣的。我認為,這兩個社區有不同的司機:.NET
開發者盯著 Microsoft,關心 Microsoft 提供的解決方案,如果他們在車窗外看到了好東西并拿來使用,Microsoft
可能會最終進入這個領域,并發布產品或者提出解決方案,這樣,以前的工作就完全被否定了。Microsoft 是 .NET 社區的司機。Java
開發者們看了看 Sun 推出的產品和語言規范,扭頭去開發他們自己的工具、框架、應用程序。Sun 推出的東西,Java 社區的開發者只有他們確實喜歡才會去使用。Struts
的門庭若市,與 JSF 的門庭冷落,印證了這一點。在 Java 社區,開發者自己是司機。
Eclipse聯盟與桌面GUI
目
前由IBM牽頭,圍繞著Eclipse項目已經發展成為了一個龐大的Eclipse聯盟,有150多家軟件公司參與到Eclipse項目中,其中包括
Borland、Rational Software、Red Hat、Sybase、SAS等。
作為一款企業信息化產品,服務端和客戶端的技術應盡可能的保持一致,這樣能夠最大的限度的資源共用。Eclipse聯盟的建立使得我們對于Java的桌面
GUI有著充分的信心。
Eclipse的插件機制、擴展機制、自動升級、幫助系統等平臺性的功能,使得我們擁有了一個現成的平臺性軟件,很多基礎性工作可以不再重復去做。
桌面GUI一向是MS的強項,在性能與界面美觀方面占據優勢,但沒有現成可用足以媲美Eclipse的框架。
成本
開發成本
另外一個非常重要的問題在于,用Java做為我們的軟件架構,開源社區為我們提供了免費(或低價)的應用服務器,項目管理工具,開發工具,數據庫系統。這
些足以滿足我們的業務需求,而沒有任何版權問題,而版權是我們軟件產品經營中早晚要面對的問題。我們需要付出的代價就是了解并掌握這些開源的產品;若采用
微軟的技術架構,則從開發工具、應用服務器、數據庫服務器、工作流等整套系統全部正版的話,有著高昂的成本。
用戶實施成本
用戶既可以在現有Windows系統上安裝,也可以安裝在Linux系統上,伸縮性良好。同時,可以支持開源的數據庫,降低用戶的實施成本。Java由于有著良好的移植性,和為數眾多的應用服務器產品,可以滿足各種客戶的需求。
跨平臺
Java當然比之Dotnet要好很多。只是對于C/S應用而言,運行在國內幾乎90%以上的Windows系統中,跨平臺貌似沒有任何意義。若干年后,如果Linux或其它系統在企業應用中被普及的時候,可能Dotnet也能夠很好的跨平臺了。
學習曲線
Dotnet入門容易,有著從服務器到開發工具的一站式解決方案;Java的入門曲線則相對較高,N多的技術、開源框架要掌握、要選擇,服務器、開發工具的順利使用要做很多的配置工作。
對于企業級開發而言,其關鍵在于滿足業務要求,合理的設計方案和架構,設計模式等,這些無論對于Java或Dotnet都是非常重要的。使用Java來學的話,由于整個社區對于架構、設計模式的普及,提升會比dotnet快。
趣味觀點
以色列軟件工程師Tamir Khason 揭示出了一個驚人的理論:有大胡子——有旺運;沒胡子——只有干瞪眼!
[8]
圖 3. C#之父Anders Hejlsberg
圖 4. Java之父James Gosling
結束語
注意了,注意了!走過路過,千萬不要錯過下面的信息啊!
感謝大家把這篇文章一直看到最后^_^
既然已經看到最后,我誠摯地邀請您再伸出援助之手:請在這篇文章的最后給出您的寶貴意見,格式如下:
我建議采用的平臺是:(Java/Dotnet/其它)
我的理由是:...
我的補充意見:...
參考資料
[1]
TIOBE程序語言使用排行榜
[2]
sourcefage開源項目所用語言排行榜
[3]
C#
vs. Java:相反的思維方式(譯文)
[4]
質疑國內.Net社區
[5]
滿江紅.開源
[6]
理解企業應用框架,原載于《程序員》
[7]
整理一下技術路線,robbin
[8]
有胡子與沒胡子的區別
[9] 微軟是如何輸掉API之戰,
上、
下
關于作者
最近正在進行本文所描述的技術架構評估,對于Java和Dotnet有些舉棋不定。熱切希望得到大家的寶貴建議,再次感謝!