<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Ruby On Rails與Jdon Framework架構比較

    http://java.ccidnet.com/art/297/20060508/547541_1.html 本文試圖比較同屬快速開發性質的Ruby on Rails(以下簡稱RoR)和Jdon Framework(以下簡稱JF)在架構上異同,供大家在實際架構選擇中比較。   RoR 是一個使用Ruby語言寫就的Web應用框架,Ruby語言是類似Python, Smalltalk, PHP和Perl的動態類型語言。從新特點層面看,Ruby on Rails并沒有提供比其他已經存在的Web應用框架新的東西,它的唯一特點就是快速開發。RoR大概誕生于2004年6月份。   JF是使用Java語言編寫的、基于Ioc/AOP微容器的快速開發工具。JF是基于JdonSD構件庫增刪改查框架基礎上發展起來的,1.0版本是在2004 年12月底完成。當時推出時很難定位,時至今日,它應該是Ruby on Rails、Spring和JBoss容器三個概念的一個中間體。屬于域驅動開發框架(DDDD:omain Driven Development framework )。   JF雖是筆者操作完成,其實它是國人網絡結晶的開源產物,很多需求和思想都來自Jdon社區熱情參與者,看到很多初學者總是為簡單和靈活做痛苦選擇,為了寫一個簡單系統,要么走入Jsp+JavaBeans誤區,要么被復雜技術配置纏身,忘記業務本職工作。JF 推出后,道友提出各種建議甚至猛烈批判,這些都形成了JF發展動力,促進JF完善。從用戶出發的簡易之道使JF的起點和立意一下和RoR這樣國外產品走到了一起,下面我們詳細進行一下兩者架構比較。 語言之爭   RoR代表的是動態類型語言派別;而Java是一種靜態類型語言,當初Java剛剛誕生時,這種兩種類型派別之爭曾經發生在Java和Smalltalk之間,后來現實選擇了Java這樣靜態類型語言,關鍵原因時動態類型語言在編程時難以找出其一些潛在的語言Bug。   但是,隨著軟件工程中單元測試的重視,動態類型語言+單元測試的結合克服了以上缺憾,從而使得RoR這樣得動態類型語言重新東山再起。   促成RoR受到敏捷工程派別的領域專家(如Martin Fowler)推崇另外一個原因是,它被認為是一種domain-specific languages(DSL)實現,DSL是一種專門供領域建模專家(也就是系統分析師)使用的語言,這些領域專家不同于程序高手,他們有一套自己認知世界和表達世界的思維和方式(如UML),因此,他們不感興趣于軟件設計細節,希望軟件能夠按照他們分析設計的結果去運行和執行就可以了。   其實,DSL并不是一個全新理念,它已經在我們軟件領域中反復出現,例如:我們很多人是關系數據庫領域專家,所以,盡管由O/R Mapping這樣工具出現,但是并沒有改變這些領域專家表達方式,他們還是使用SQL等嚴謹的數學思維來實現他們的表達方式。   DSL概念非常好,但是是否有必要重新搞一套DSL語言則涉及很多方面的問題,新的語言總會在實踐中有新的陷阱,Java經過十多年發展,成熟和發展是其特點。   當然,別以為RoR頂著DSL新名詞就是一個非常好的東西,對其本質微詞已經不絕于耳,有人認為它實質不過就是1994的Visual FoxPro(Ruby on Rails is a Bloody Square Turd ),提出該觀點的作者認為:為什么我們在一個沒有重構以及調試支持的編碼環境中工作?為什么還要重覆以前的痛苦呢?如果你確實喜歡RoR的ActiveRecord,為什么不用. NET呢?RoR 不是開發Web應用平臺, RoR is a cult(RoR是宗教崇拜,筆者注:大概因為是因為所謂大師級的人推薦原因).   無論如何,讓我們拋開爭執,通過比較看看RoR一些特點。 多層架構   現在多層架構已經深入人心,多層主要是指表現層MVC、業務層和持久層多層分離的體系,由于Java是一個技術自由選擇的世界,因此,每個層面都有不同的具體框架技術供選擇, 提供選擇是一種好事,但是又可能是一種壞事,需要應用者花費精力學習和研究,這非常類似我們購物。   在微軟世界,由于各層框架技術幾乎都是由一家提供的,所以,.NET就索性將這些框架直接集成到IDE開發工具,對于有的程序員感覺.NET用起來很快,將開發工具和框架混合成一體,但這是以綁定為代價的,甚至有程序員反感Java世界IDE+框架的開發方式,認為在開發工具之外還會多一個框架,并且認為違背KISS(keep it simple and stupid)原則,其實不然,關鍵是追求KISS原則的同時,不要使自己受制于某個廠商或平臺,使自己變得簡單以及愚蠢 (失去自己作為客戶的上帝位置,被廠商忽視,成為簡單而愚蠢的人),此為KMSS(keep me simple and stupid)。   在Java世界,多層結構實現路徑很多,從MVC到持久層框架有各種選擇,例如我們可以使用Struts以及Hibernate組合成一個J2EE多層 應用系統。   Rails也提供了model/view/controller多層實現,但是各層的實現框架也確定下來,省卻了程序員在多個框架之間選擇帶來的“麻煩”(這是相對的)。   而Jdon Framework則類似RoR這種提供缺省各層實現設計,表現層在struts基礎上進行了CRUD流程抽象;通過提供JdbcTemp實現持久層技術,當然,持久層具體實現也可以選擇hibernate等其他框架實現,秉承提供缺省的,但是也是可替換的宗旨。   下圖是兩者各層架構比較圖:   我們通過上圖可以看出,兩者流程基本一致,所不同的主要是兩點:RoR的Action Pack和Active Record,下面我們就這兩點解釋如下: Action Pack   Action Pack是RoR的MVC組件框架:   View templates,相當于Struts中的Jsp;   URL routing,相當于struts-config.xml流程配置,RoR不是使用XML配置,而是作為腳本代碼,這也是一些人吹噓的RoR無繁多 XML配置真相所在,其實,XML也是一種腳本,從某種意義上來說:XML比語言腳本更簡單易寫(至少語法不多)。   ActionController,初看相當于struts的DispatchAction,但是因為其包含業務邏輯,而我們在java中是不推薦在在控制層action中寫業務邏輯的。   ActionController功能在于:RoR可以將瀏覽器的請求直接映射到ActionController類的方法上,這有些類似Struts 中的DispatchAction,但是,在Java中,業務邏輯是不推薦寫在表現層的控制類中的,控制類只是負責前后臺流程協調,是一種 Mediator模式實現,不應該讓其加入更多職責;在JF中,業務邏輯是寫在Service類中,JF通過自己的命令服務調用模式,也可以直接將瀏覽器的請求直接映射到Service類的方法上,例如,調用http://localhost//MyWeb/abc.do?method=xxx,將直接激活Service類的xxx方法,程序員直接編寫xxx方法內容即可。   RoR的Filters過濾器也是Action Pack的一個部分,主要用來實現一些通用功能的動態插入,這在JF中是通過AOP攔截器和Decorator模式來實現的,見AOP vs Decorator 一文,在JiveJdon3.0中,我們通過攔截器實現了組件方法權限訪問、以及緩存等通用功能。   Action Pack中還有Helpers功能相當于Struts的標簽庫,它可以把Model/ActionForm和Action以及html連接在一起,下面是RoR的Helpers如:   Name: <%= text_field "person", "name", "size" => 20 %>   ....   當然,RoR的Helpers有很多種類,如Form Helpers/javascriptHelpers等等,相當于一個個API 庫。它的Ajax & JavaScript helpers倒是很時髦的。   RoR的Layouts相當于Struts的Tiles,這就不多說了。   Scaffolding提供一個數據表的CRUD功能實現,Scaffolding類似代碼生成器,生成CRUD代碼,缺點是,如果你更改了代碼, Scaffolding會在覆蓋,必須再更改Scaffolding設置,實際用起來比較麻煩。而JF的CRUD是一個MVC流程上的精簡,屬于開發框架性質,而不是代碼生成,只需要通過jdonframework.xml配置:                                                       Active Record   RoR有一個Active Record組件,其實就是ORM實現,相當于Hibernate,它是Martin Fowler的 Active Record pattern實現,它是指一個既包含數據又包含行為的對象,這些數據需要持久保存到對應的數據表中。Active Record一個很明顯的特征是:將數據訪問邏輯也包含在這個domain對象中,通過這種辦法讓人們可以知道如何從數據庫讀寫數據。如下圖:   Active Record其實類似JF中Domain Object + Dao,也就是將Dao中對數據庫的CRUD方法和Domain Object整合在一起,我們知道,Dao模式本質是橋模式,通過Dao可以將不同的數據庫訪問實現分離,并且在運行時組合,但是,Martin Fowler將Dao從Domain Object分離出去的對象稱為貧血對象。   他的這個觀點筆者認為不是從技術觀點,而是從領域建模角度出發的,其實從技術觀點講,將Dao從Domain Object中分離在設計上非常靈活,例如使用JF開發的JiveJdon3.0中,我們就可以在Dao層中使用Decorator模式(過濾器)加入一層緩存,這樣,雖然我們Dao層使用的SQL實現,我們也是可以實現持久層緩存,JiveJdon3.0整個Dao層設計相當于一個Hibernate的微型(或者說輕量化),好處是:JiveJdon3.0這樣實現的緩存可以被各層如表現層直接訪問,減少路徑,提升運行性能。 RoR秘籍   通過以上分析,我們也許已經明白RoR和JF定位,大家為什么突然擁戴RoR,這是因為大家比較厭惡XML配置,太復雜的XML配置只能增加開發的復雜性,而JF則在這方面從以下幾個方面進行了努力: 1. 表現層的struts-config.xml配置是模板化的,CRUD流程固化模板化,拷貝粘貼就可以完成配置。 2. JF自身的配置很簡單,只包括兩個部分Models和Services,配置語法主要集中再Models部分,語法數量不超過10個,Models負責CRUD流程配置,如果你不需要使用CRUD可以不用配置;Services是業務類配置,對于一個POJO類,只要寫:如下:        class="com.jdon.jivejdon.service.imp.ForumServiceImp"/>        class="com.jdon.jivejdon.service.imp.ForumMessageShell"/> 至于,這些POJO之間的調用關系,無需指定,這由JF內置IOC微容器自動配對解決。 3. 持久層試圖通過JdbcTemp或SQL語句簡化配置,當然Hibernate等java工具也在進步,不斷重構,相信會越來越簡單。   總結:相比RoR,作為DDD(Domain Driven Development framework )實現的JF在快速開發和軟件高質量上作了一個平衡,相當于在RoR(快速,但非主流語言)和Spring(高質量,但配置煩瑣)之間做了一個平衡。   JF一直也試圖爭取獲得國外軟件專家的認可,可能會因為其他因素未能如愿,但是,作為和RoR幾乎同時誕生的國產JF,作為由國人網民共同參與的結晶,已經用事實證明,國人有能力靠創新沖刺世界軟件領域的前列。   無論如何,在RoR精神的召引下,Java世界將引來第四代語言4GL時代,同時能夠滿足求簡單或求靈活等不同編程心理的需求,迎來新的發展

    posted on 2006-09-25 08:54 Sheldon Sun 閱讀(192) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2006年9月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    1234567

    導航

    統計

    常用鏈接

    留言簿(3)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲第一成年人网站| 亚洲中文字幕无码一久久区| 久久精品国产亚洲av影院| 成全视频高清免费观看电视剧| 免费一级毛片清高播放| 日本一区二区三区在线视频观看免费 | 亚洲日产2021三区在线| 99在线观看免费视频| 伊人久久综在合线亚洲2019| 99re在线这里只有精品免费| 亚洲欧洲校园自拍都市| 无码免费午夜福利片在线| 国产精品亚洲四区在线观看| 好吊妞视频免费视频| 一区二区免费在线观看| 亚洲精品tv久久久久久久久| 国产一区二区免费视频| 亚洲精品视频在线免费| 免费理论片51人人看电影| 美女露隐私全部免费直播| 亚洲色欲久久久综合网东京热| 日本一区二区免费看| 亚洲国产成人精品久久| 国产网站在线免费观看| xvideos永久免费入口| 久久久久亚洲精品美女| 久久精品免费一区二区喷潮 | 亚洲gv猛男gv无码男同短文| 最新黄色免费网站| 亚洲欧美乱色情图片| 亚洲综合精品网站| 91成人在线免费视频| 中文字幕亚洲综合久久综合| 一级毛片直播亚洲| 99久在线国内在线播放免费观看| 亚洲一卡2卡3卡4卡乱码 在线| 亚洲精品乱码久久久久久不卡| 啦啦啦完整版免费视频在线观看 | 亚洲一级片在线观看| 亚洲Av无码乱码在线播放| 91精品国产免费入口|