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