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

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

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

    大音希聲、大象無(wú)形

    Java企業(yè)級(jí)應(yīng)用軟件開發(fā)探討

    #

    JavaEE持久層開發(fā)方式現(xiàn)狀和簡(jiǎn)單評(píng)價(jià)

    基于JavaEE的分布式三層企業(yè)級(jí)應(yīng)用的數(shù)據(jù)存取方式有很多種,比如關(guān)系型數(shù)據(jù)庫(kù)、普通文件、遠(yuǎn)程服務(wù)等。但是數(shù)據(jù)的存取主要采用關(guān)系型數(shù)據(jù)庫(kù),下面主要關(guān)注關(guān)系型數(shù)據(jù)庫(kù)的持久層開發(fā)方式。

    開發(fā)方式大體以下幾種方式(括號(hào)內(nèi)為目前使用它的工作難度、強(qiáng)度,記住,我們討論的是動(dòng)輒就上百個(gè)表、幾個(gè)業(yè)務(wù)小組聯(lián)合開發(fā)的企業(yè)級(jí)應(yīng)用,所以工作強(qiáng)度的估計(jì)一點(diǎn)兒也沒(méi)有夸張):
    1. 直接JDBC操作(簡(jiǎn)單,小):底層操作(注1)較多,弄不好就會(huì)造成業(yè)務(wù)邏輯層和持久層的高度耦合。
    2. SQLMapping(比較簡(jiǎn)單,一般):把底層操作全部提取出來(lái)統(tǒng)一進(jìn)行管理,本身并沒(méi)有對(duì)概念上進(jìn)行什么革新。但是這種統(tǒng)一的處理在邏輯上其實(shí)屬于分而治之的邏輯,通過(guò)良好的對(duì)它的使用可以體現(xiàn)出松耦合實(shí)現(xiàn)持久層的要求,也相對(duì)比較便于管理和修改。
    3. O/RMapping(有學(xué)習(xí)曲線,沒(méi)有工具支持會(huì)相當(dāng)大):存在的時(shí)間已經(jīng)很長(zhǎng),我認(rèn)為它的最主要的作用是關(guān)系型數(shù)據(jù)庫(kù)的反設(shè)計(jì)——關(guān)系型數(shù)據(jù)庫(kù)的設(shè)計(jì) 就是要把現(xiàn)實(shí)中的對(duì)象和對(duì)象間關(guān)系設(shè)計(jì)成實(shí)體和實(shí)體間的關(guān)系映射。而O/RMapping恰好相反,它是把實(shí)體和實(shí)體間的關(guān)系映射還原回對(duì)象和對(duì)象間的關(guān) 系。
    4. Entity EJB(有學(xué)習(xí)曲線,沒(méi)有工具支持會(huì)相當(dāng)大):我沒(méi)有對(duì)它進(jìn)行過(guò)深入的研究,但是從J2EE的概念上看,它是屬于O/RMapping概念的一種。它既是 一個(gè)事實(shí)上的工業(yè)標(biāo)準(zhǔn)而且又體現(xiàn)了EJB的容器管理特性。本身其實(shí)是很值得研究的,但是由于目前而言EJB3.0剛剛起步,而EJB2.0的開發(fā)也確實(shí)比 較麻煩,還有等等等等一系列的其他事情,我對(duì)它暫時(shí)處于觀望態(tài)度。
    5. DataSet(比較簡(jiǎn)單,看實(shí)現(xiàn)方式):這是所有從PB和C++Builder年代走過(guò)來(lái)的人最喜歡的方式,它并沒(méi)有對(duì)關(guān)系操作進(jìn)行對(duì)象封裝,但是它卻 在對(duì)象級(jí)別對(duì)數(shù)據(jù)庫(kù)的操作進(jìn)行了比較好的封裝,相對(duì)而言它的使用難度跟SQLMapping 相當(dāng),但是工作強(qiáng)度卻比SQLMapping要低。目前IBM和BEA提出那個(gè)CommonJ的持久層操作Service Data Objects沒(méi)用過(guò),不提什么意見,但是MS.NET的ADO.NET倒是用它做過(guò)項(xiàng)目,有點(diǎn)了解。MS的ADO.NET主要是通過(guò)DataSet經(jīng)由 DataAdapter進(jìn)行數(shù)據(jù)持久化操作,由DataSet記錄每一次對(duì)它的數(shù)據(jù)操作,在重新得到數(shù)據(jù)庫(kù)連接后,會(huì)經(jīng)由DataAdaptor通過(guò)分析 元信息(一般也是映射)和數(shù)據(jù)操作記錄來(lái)自動(dòng)生成該執(zhí)行的SQL語(yǔ)句。DataSet本身可以跟XMLSchema等同(兩者可以相互轉(zhuǎn)化),所以在表現(xiàn) XML數(shù)據(jù)的方面它是當(dāng)仁不讓的。我認(rèn)為DataSet的機(jī)制是ADO.NET的核心機(jī)制,也是微軟在應(yīng)用開發(fā)方面策略的所在。

    評(píng)價(jià):

    不用說(shuō)也能清楚,直接JDBC操作的方式持久層和業(yè)務(wù)邏輯層耦合最嚴(yán)重,只要持久層有一點(diǎn)改變,業(yè)務(wù)邏輯層就得相應(yīng)的改變重新打包和部署,反之亦 然。事實(shí)上一個(gè)超過(guò)300個(gè)Class文件和500個(gè)JSP的中等項(xiàng)目中遍布JDBC直接操作的話,數(shù)據(jù)庫(kù)庫(kù)表和業(yè)務(wù)邏輯的每一處小的修改都是一場(chǎng)噩夢(mèng)。

    SQLMapping還算可以接受,事實(shí)證明SQLMapping是替換掉JDBC的最好方式,如果你現(xiàn)在還在執(zhí)意于使用直接使用JDBC的話,換 SQLMapping好了,效率不低,開發(fā)起來(lái)跟直接直接使用JDBC差距不大,iBatis就不錯(cuò)。

    O/RMapping是一個(gè)重頭戲,它是目前唯一的一種用面向?qū)ο蟮姆绞浇鉀Q關(guān)系型數(shù)據(jù)庫(kù)持久化問(wèn)題的方法(我覺得也是目標(biāo)明確的方法)。有趣的是,關(guān)系 型模型的范圍要比對(duì)象化模型寬泛,這樣就造成了,過(guò)去的系統(tǒng)設(shè)計(jì)中對(duì)對(duì)象化模型考慮的不夠,使得過(guò)去系統(tǒng)的中的數(shù)據(jù)存儲(chǔ)方式對(duì)O/RMapping實(shí)現(xiàn)不 利(這是事實(shí));還有就是很多數(shù)據(jù)為中心的業(yè)務(wù)處理(比如計(jì)算電費(fèi),報(bào)表數(shù)據(jù)處理),用對(duì)象化模型不太合適(注2),這種情況下,O/RMapping實(shí) 在是不能長(zhǎng)袖善舞。

    DataSet是一種萬(wàn)金油式的對(duì)象化解決方案,處理小型的項(xiàng)目綽綽有余,處理大型的項(xiàng)目就有點(diǎn)力不從心了。萬(wàn)金油式的解決方案最大的缺點(diǎn)就是高不成、低不就,雖然在使用上它是相對(duì)簡(jiǎn)單的。我倒沒(méi)有說(shuō)ADO.NET本身有問(wèn)題,其實(shí).NET也有O/RMapping啊。

    綜上所述,我們可以得出結(jié)論。目前而言所有流行的持久層實(shí)現(xiàn)方式都有其優(yōu)點(diǎn)和缺點(diǎn)(技術(shù)辯證法)。作為商業(yè)化的企業(yè)級(jí)應(yīng)用而言,一個(gè)技術(shù)堅(jiān)持到底的 路是走不通的(肯定會(huì)在技術(shù)的缺點(diǎn)上吃大苦頭)。我推薦至少要使用兩種以上的技術(shù)進(jìn)行持久層封裝(我推薦O/RMapping + SQLMapping + JDBC——實(shí)在是解決不了的問(wèn)題再找JDBC),要采用務(wù)實(shí)的方式進(jìn)行技術(shù)選擇,而不要迷信哪一種技術(shù),對(duì)于大型企業(yè)級(jí)開發(fā)而言,目前沒(méi)有銀彈。

    注1:按我的話說(shuō)是Dirty Work
    注2:本身可重用性就不夠(各處的算法都有不同),但是對(duì)運(yùn)行時(shí)效率的要求卻很高(有的時(shí)候甚至Java本身的效率都不足以達(dá)到要求,只能求之于其他語(yǔ)言)

    posted @ 2006-03-21 10:29 guitarpoet 閱讀(1540) | 評(píng)論 (2)編輯 收藏

    企業(yè)級(jí)應(yīng)用為什么要分層?

    首先,需要知道什么是企業(yè)級(jí)應(yīng)用。

    企業(yè)級(jí)應(yīng)用(enterprise applications),其實(shí)是一個(gè)軟件行業(yè)內(nèi)部通用的一個(gè)術(shù)語(yǔ)。如果解釋成通俗易懂的話來(lái)說(shuō),那就是一個(gè)企業(yè)范圍內(nèi)所使用的、基于計(jì)算機(jī)的穩(wěn)定的、安全的和高效的分布式信息管理系統(tǒng)。
    對(duì)于企業(yè)級(jí)應(yīng)用而言它的分布式有兩種形式:B/S結(jié)構(gòu)和C/S結(jié)構(gòu)。由于瀏覽器的功能日益強(qiáng)大、網(wǎng)頁(yè)技術(shù)的日益流行和應(yīng)用服務(wù)器軟件和中間件產(chǎn)品的逐步成 熟,B/S結(jié)構(gòu)的企業(yè)級(jí)應(yīng)用已經(jīng)成為一種流行的趨勢(shì),所以在下面的討論中所謂的企業(yè)級(jí)應(yīng)用統(tǒng)一為基于B/S結(jié)構(gòu)的分布式企業(yè)信息系統(tǒng)。

    一般說(shuō)來(lái)企業(yè)級(jí)應(yīng)用都可以分為三層持久層(Persistence Layer)業(yè)務(wù)邏輯層(Business Logic Layer)展現(xiàn)層(Presentation Layer )
    為什么要分這么幾個(gè)層次呢?
    歸根結(jié)底主要原因只有一個(gè)——那就是提高軟件開發(fā)生產(chǎn)力,降低軟件開發(fā)成本,提高軟件產(chǎn)品質(zhì)量。
    因?yàn)檐浖疽彩琴Y本公司,公司的主要目標(biāo)是盈利而不是科技發(fā)展。所以,公司的技術(shù)架構(gòu)的優(yōu)劣主要應(yīng)該體現(xiàn)在公司的生產(chǎn)成本和產(chǎn)品的質(zhì)量上。
    對(duì)于降低軟件產(chǎn)品的開發(fā)成本是軟件產(chǎn)品出現(xiàn)以來(lái)所有軟件公司所追求的目標(biāo)。到目前為止,達(dá)到這個(gè)目標(biāo)的方式有這么幾種:
    1. 把 軟件產(chǎn)品根據(jù)功能進(jìn)行分解,分別開發(fā):對(duì)于大的復(fù)雜系統(tǒng),如果沒(méi)有很好的分解開發(fā)的話,其結(jié)果是不可想象的。現(xiàn)實(shí)中企業(yè)需要分開各個(gè)職能部門,它們的職責(zé) 和業(yè)務(wù)是不同的,這樣開發(fā)中需要根據(jù)業(yè)務(wù)進(jìn)行任務(wù)分解,把大的系統(tǒng)分解成為小的業(yè)務(wù)系統(tǒng)。這樣才能夠?qū)崿F(xiàn)系統(tǒng)開發(fā)過(guò)程中的并行開發(fā),并且會(huì)培養(yǎng)業(yè)務(wù)專精人 員,提高開發(fā)的效率。
    2. 業(yè)務(wù)系統(tǒng)根據(jù)技術(shù)架構(gòu)進(jìn)行分層開發(fā):分層的開發(fā)方式實(shí)現(xiàn)了人類對(duì)復(fù)雜事物的普遍處理方式——分而治之。通過(guò)把復(fù)雜的系統(tǒng)分解成為相對(duì)簡(jiǎn)單的獨(dú)立系統(tǒng),低耦 合的分解既可以實(shí)現(xiàn)開發(fā)人員的并行工作,又可以實(shí)現(xiàn)開發(fā)人員的任務(wù)分工。而且通過(guò)分層,對(duì)組件拼裝和流水化作業(yè)提供了理論和事實(shí)的基礎(chǔ)。
    3. 組件拼裝實(shí)現(xiàn)社會(huì)化分工:不必自己去創(chuàng)造輪子,直接付錢去買想要的輪子即可。這是從傳統(tǒng)的制造行業(yè)借鑒來(lái)的經(jīng)驗(yàn)。J2EE得到的廣泛認(rèn)同從實(shí)質(zhì)上體現(xiàn)了業(yè)界對(duì)這種方式的肯定。
    4. 過(guò)去經(jīng)驗(yàn)的積累和積累資源的重復(fù)利用:重用一直是一個(gè)爭(zhēng)議比較大的東西,爭(zhēng)論的雙方各執(zhí)一詞,各有道理也各有大師助陣,但是那更多的是在理論上和技術(shù)層面 上。理論和技術(shù)上的爭(zhēng)論對(duì)商業(yè)軟件開發(fā)是無(wú)用的。因?yàn)樯虡I(yè)化的軟件開發(fā),最重要的是提供優(yōu)質(zhì)的產(chǎn)品和服務(wù)并且能夠最大可能的獲取利潤(rùn)。所以,拋開具體實(shí)現(xiàn) 方式不談,我個(gè)人覺得公司過(guò)去經(jīng)驗(yàn)的積累和積累資源的重復(fù)利用是有商業(yè)價(jià)值的。因?yàn)檐浖颈仨毜妹鎸?duì)開發(fā)人員流動(dòng)的問(wèn)題,不管是升遷還是調(diào)動(dòng)還是跳槽, 軟件公司總會(huì)面對(duì)業(yè)務(wù)專精人員的流失問(wèn)題。業(yè)務(wù)專精人員的流失造成的成本是要計(jì)算在開發(fā)成本中的,所以怎樣以固化的形式積累業(yè)務(wù)人員的經(jīng)驗(yàn),和過(guò)去解決問(wèn) 題的方案的可重復(fù)利用以及新員工職業(yè)培訓(xùn)成本的降低在降低開發(fā)成本的方面是值得考慮的。
    綜上所述,對(duì)于一個(gè)企業(yè)級(jí)應(yīng)用框架(還有人開發(fā)企業(yè)級(jí)應(yīng)用不用框架嗎?)而言,分層是提高開發(fā)效率、降低開發(fā)和培訓(xùn)成本的最佳實(shí)踐方案之一。
    但是,為什么要分為持久層(Persistence Layer)業(yè)務(wù)邏輯層(Business Logic Layer)展現(xiàn)層(Presentation Layer ) 3層呢?
    其實(shí)這三層不過(guò)就是從三個(gè)不同的視角去看這個(gè)企業(yè)信息系統(tǒng)罷了。從數(shù)據(jù)的角度看,企業(yè)信息系統(tǒng)不外乎就是對(duì)數(shù)據(jù)的存取。從功能的角度看,企業(yè)信息系統(tǒng)就是 對(duì)現(xiàn)實(shí)中的業(yè)務(wù)邏輯操作的信息化抽象而從用戶的角度上看,它是一個(gè)人機(jī)接口,它可以接受輸入并且會(huì)對(duì)所做的輸入做出相應(yīng)的反應(yīng)。這三層從底向上實(shí)現(xiàn)了底層 計(jì)算機(jī)數(shù)據(jù)和頂層人的業(yè)務(wù)操作的跨越,一般說(shuō)來(lái),從概念上講,所有的企業(yè)級(jí)應(yīng)用框架都可以分成這三層,因?yàn)檫@三個(gè)視角是客觀的。但是這并不保證所有的企業(yè) 級(jí)應(yīng)用都能保證這三個(gè)層之間不發(fā)生耦合。

    posted @ 2006-03-20 17:29 guitarpoet 閱讀(1711) | 評(píng)論 (0)編輯 收藏

    開宗明義

    “其安易持,其未兆易謀。其脆易泮,其微易散。為之於未有,治之於未亂。合
    抱之木生於毫末。九層之臺(tái)起於累土。千里之行始於足下。為者敗之,執(zhí)者失之。
    是以圣人無(wú)為故無(wú)敗,無(wú)執(zhí)故無(wú)失。民之從事常於幾成而敗之。慎終如始則無(wú)敗
    事。是以圣人欲不欲,不貴難得之貨。學(xué)不學(xué),復(fù)眾人之所過(guò),以輔萬(wàn)物之自然而
    不敢為。”
    ——《道德經(jīng)》,老子

    這是我的一個(gè)關(guān)于Java技術(shù)的Blog,為什么要寫這個(gè)Blog?

    答案有四:
    1. 心得記錄:搞技術(shù)的人總是健忘(尤其是搞計(jì)算機(jī)的),分門別類寫成文章,強(qiáng)迫自己總結(jié)一下,增強(qiáng)記憶不說(shuō),還可以便于以后查找。
    2. 克服懶病:只想看而不寫總是對(duì)自己不好,立下一個(gè)愿望,爭(zhēng)取保持更新吧。
    3. 草稿收集:報(bào)告要寫,但是提交之后就如泥牛入海,杳無(wú)音訊了。我都不知道我因?yàn)閾Q機(jī)器和重裝機(jī)器丟了多少草稿了(還是因?yàn)榻⊥蛻校?/li>
    4. 拋磚引玉:我只有一些淺見,還望高手不吝賜教。
    真心希望大家能夠共同交流,就算交個(gè)朋友吧。
    這便算是個(gè)開篇。

    posted @ 2006-03-20 17:23 guitarpoet 閱讀(374) | 評(píng)論 (1)編輯 收藏

    僅列出標(biāo)題
    共3頁(yè): 上一頁(yè) 1 2 3 
    主站蜘蛛池模板: 亚洲AV永久无码区成人网站| 亚洲av日韩片在线观看| 亚洲电影免费在线观看| 中文字幕手机在线免费看电影| 免费国产成人高清在线观看麻豆| 亚洲爆乳无码精品AAA片蜜桃| 男女啪啪永久免费观看网站| 亚洲综合一区二区三区四区五区 | 国产成人亚洲综合色影视| 人成免费在线视频| 国产成人精品日本亚洲专区61| 大妹子影视剧在线观看全集免费| 久久亚洲AV永久无码精品| 在线观看人成视频免费无遮挡| 久久精品国产亚洲香蕉| 91人人区免费区人人| 国产色在线|亚洲| 在线日韩av永久免费观看| 免费一级毛片在线播放放视频| 亚洲一区二区三区免费| 日本免费在线观看| 亚洲午夜电影一区二区三区| 成人网站免费观看| 成年免费a级毛片| 亚洲αv久久久噜噜噜噜噜| av免费不卡国产观看| 337P日本欧洲亚洲大胆精品| 中文字幕亚洲一区二区三区| 久久久99精品免费观看| 日韩亚洲产在线观看| 亚洲另类激情专区小说图片| 国产精品99久久免费观看| 亚洲五月丁香综合视频| 免费人妻无码不卡中文字幕18禁| 成年女人A毛片免费视频| 久久久无码精品亚洲日韩京东传媒 | 韩国18福利视频免费观看| 一级特级女人18毛片免费视频| 亚洲激情视频在线观看| 国内外成人免费视频| 日本高清不卡aⅴ免费网站|