WEB開(kāi)發(fā)框架JACKER探討

2024-04-24    分類: 網(wǎng)站建設(shè)

沒(méi)有簡(jiǎn)單的商業(yè)應(yīng)用,一個(gè)成熟的軟件就必然具有一定的復(fù)雜度。所以一個(gè)成熟的開(kāi)發(fā)框架就必不可少。

介紹JACKER之前,先拋出一些我的觀點(diǎn),這些觀點(diǎn)有的是我在多年的開(kāi)發(fā)積累中形成,更多則是來(lái)自javaeye,在這里我也發(fā)過(guò)一些貼子,但看貼居多。有時(shí)我真的覺(jué)得技術(shù)積累還不是最重要的,最多讓你成為一個(gè)熟練的技工而已。最重要的是思想,理念的交流,以及溶入自己的思考。

我有幸在論壇中看到了很多開(kāi)發(fā)理念的爭(zhēng)論,在翻閱這些貼子的同時(shí),自己也不知不覺(jué)的就有了立場(chǎng):

.分層開(kāi)發(fā)

分層開(kāi)發(fā)帶來(lái)的直接好處就是關(guān)注點(diǎn)分離,每個(gè)開(kāi)發(fā)只要專注于自己一層的開(kāi)發(fā),是開(kāi)發(fā)專業(yè)質(zhì)量軟件的起點(diǎn)。

沒(méi)有一個(gè)開(kāi)發(fā)會(huì)是全才,即使你了解每一層的開(kāi)發(fā)技術(shù):

html+css+javascript,java:struts+spring+hibernate,xml等等,你敢說(shuō)你精通這所有的技術(shù)么?我做了五年的開(kāi)發(fā),接觸了很多,算是很有經(jīng)驗(yàn)了,但坦白講,自己對(duì)html,css始終沒(méi)有太多興趣,javascript的掌握也只有所側(cè)重,用javascript實(shí)現(xiàn)一個(gè)時(shí)鐘或獨(dú)立完成一個(gè)javascript樹(shù)對(duì)我來(lái)說(shuō)簡(jiǎn)直就是不可想象;hibernate也只關(guān)注單表的配置和操作,其他地方?jīng)]時(shí)間做深究;xml操作則是了解了下dom4j的一部分,什么xpath因?yàn)橛貌恢蜎](méi)看;

沒(méi)有全才,全才也不能這么用。讓他從頭到尾從界面到數(shù)據(jù)庫(kù)的實(shí)現(xiàn)一個(gè)軟件模塊的每個(gè)編碼細(xì)節(jié),這是對(duì)軟件質(zhì)量的犯罪?!叭拧遍_(kāi)發(fā)員的水平也有高有低,技術(shù)偏重也各不相同,一人一桿子捅到底的做法,后果就是一個(gè)系統(tǒng)里的各個(gè)模塊質(zhì)量參差不齊,界面風(fēng)格難以統(tǒng)一,代碼混亂,公用配置文件并發(fā)沖突嚴(yán)重...

所以開(kāi)發(fā)要分層,WEB開(kāi)發(fā)首先要分出WEB層,業(yè)務(wù)層,而WEB層還要用MVC架構(gòu)再細(xì)分;

分層的開(kāi)發(fā)需要分層的架構(gòu),分層的框架也強(qiáng)制要求分層的開(kāi)發(fā)。你如果堅(jiān)持一人包辦一個(gè)模塊的做法,那我覺(jué)得你還是采用jsp+javaBean的做法更合適,別選擇分層架構(gòu)了,讓一個(gè)人在各層間跳來(lái)跳去,會(huì)頭暈的;

分層開(kāi)發(fā)的一個(gè)難點(diǎn)是管理,如何分配任務(wù)和各層集成調(diào)試給管理者提出了較高的要求。這是另一個(gè)話題這里就不多說(shuō)了。

.DTO,WEB層,業(yè)務(wù)層

DTO就是Data Transfer Object,數(shù)據(jù)傳輸對(duì)象。DTO主要負(fù)責(zé)client(WEB層)和業(yè)務(wù)層的數(shù)據(jù)傳遞。DTO簡(jiǎn)單的就是一些Java類型,比如:String,Integer,甚至List,Map等,更多就是POJO了,用屬性承載數(shù)據(jù)。雖然只有屬性的DTO被一些大師如Martin Fowler認(rèn)為是“貧血的”,但我認(rèn)為DTO很好的履行了它的職責(zé):描述業(yè)務(wù)接口,傳輸業(yè)務(wù)數(shù)據(jù)。從調(diào)用業(yè)務(wù)層的角度,我把DTO細(xì)分為傳參PDTO和返回值RDTO。有屬性的DTO也從數(shù)據(jù)角度很好的描述了業(yè)務(wù)。所以DTO是必不可少的;

DTO有效的隔離了WEB層(調(diào)用層)和業(yè)務(wù)層,現(xiàn)在還有“貧血的”和“不貧血”之爭(zhēng),我覺(jué)得使用“貧血”這樣的字眼有扣帽子之嫌,我更愿意稱這樣的DTO為簡(jiǎn)單DTO,簡(jiǎn)單DTO堅(jiān)持了一個(gè)我認(rèn)為必須堅(jiān)持的原則:層次分明,不把業(yè)務(wù)邏輯擴(kuò)散到WEB層。分層的目的不就是分離邏輯么,怎么WEB層還能訪問(wèn)有業(yè)務(wù)邏輯的對(duì)象?包括業(yè)務(wù)常量,都是WEB應(yīng)該杜絕訪問(wèn)的。而顯然“不貧血”的DTO不打算這么做;

“簡(jiǎn)單即是美”,DTO也是。

另外,DTO和O/R mapping中的數(shù)據(jù)對(duì)象PO(比如:Hibernate的POJO)是兩回事,一個(gè)描述業(yè)務(wù),一個(gè)負(fù)責(zé)底層數(shù)據(jù)庫(kù)操作。你如果選擇了分層,就不要試圖用PO取代DTO傳遞到WEB層,自然更不需要hibernate的什么open session in view。原因很多:

分層帶來(lái)的一個(gè)好處是同步開(kāi)發(fā),甚至WEB層可以先于后臺(tái)業(yè)務(wù)而實(shí)現(xiàn),只要業(yè)務(wù)接口定義好并且業(yè)務(wù)層有了模擬MOCK實(shí)現(xiàn)。試想數(shù)據(jù)庫(kù)還沒(méi)建立時(shí),你的PO從何而來(lái),又怎么能傳到WEB層去? 分層帶來(lái)的另一個(gè)好處是各層的可替換,和可獨(dú)立變化以應(yīng)對(duì)變化的需求,而DTO作為描述業(yè)務(wù)接口的對(duì)象類型應(yīng)該是相對(duì)穩(wěn)定的,這種要求下,可能某天你的業(yè)務(wù)層操作不用hibernate而使用ojb了,你還能堅(jiān)持使用hibernate的PO來(lái)描述業(yè)務(wù)接口?或者你的O/R永遠(yuǎn)不變,但頻繁的數(shù)據(jù)庫(kù)的重構(gòu)導(dǎo)致你的PO一改再改,你還敢用PO去取代相對(duì)穩(wěn)定的DTO么?

或許你會(huì)告訴我不需要同步開(kāi)發(fā)或?qū)犹鎿Q或?qū)营?dú)立變化,那你該考慮為什么選擇分層了,或許分層的架構(gòu)不是你想要的。

本文來(lái)源于成都網(wǎng)站建設(shè)公司與成都網(wǎng)站設(shè)計(jì)制作公司-創(chuàng)新互聯(lián)成都公司!

網(wǎng)頁(yè)標(biāo)題:WEB開(kāi)發(fā)框架JACKER探討
分享網(wǎng)址:http://bm7419.com/news19/325069.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、Google網(wǎng)站策劃、自適應(yīng)網(wǎng)站、App開(kāi)發(fā)、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化