国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
使用open source產(chǎn)品組裝你的web應(yīng)用架構(gòu)(一)

其實(shí),就算用Java建造一個(gè)不是很煩瑣的web應(yīng)用,也不是件輕松的事情。 在構(gòu)架的一開始就有很多事情要考慮。 從高處看,擺在開發(fā)者面前有很多問題:要考慮是怎樣建立用戶接口?在哪里處理業(yè)務(wù)邏輯? 怎樣持久化的數(shù)據(jù)。 而這三層構(gòu)架中,每一層都有他們要仔細(xì)考慮的。 各個(gè)層該使用什么技術(shù)? 怎樣的設(shè)計(jì)能松散耦合還能靈活改變? 怎樣替換某個(gè)層而不影響整體構(gòu)架?應(yīng)用程序如何做各種級(jí)別的業(yè)務(wù)處理(比如事務(wù)處理)?

構(gòu)架一個(gè)Web應(yīng)用需要弄明白好多問題。 幸運(yùn)的是,已經(jīng)有不少開發(fā)者已經(jīng)遇到過這類問題,并且建立了處理這類問題的框架。 一個(gè)好框架具備以下幾點(diǎn): 減輕開發(fā)者處理復(fù)雜的問題的負(fù)擔(dān)("不重復(fù)發(fā)明輪子"); 內(nèi)部有良好的擴(kuò)展; 并且有一個(gè)支持它的強(qiáng)大的用戶團(tuán)體。  好的構(gòu)架一般有針對(duì)性的處理某一類問題,并且能將它做好(Do One Thing well)。 然而,你的程序中有幾個(gè)層可能需要使用特定的框架,已經(jīng)完成的UI(用戶接口) 并不代表你也可以把你的業(yè)務(wù)邏輯和持久邏輯偶合到你的UI部分。  舉個(gè)例子, 你不該在一個(gè)Controller(控制器)里面寫JDBC代碼作為你的業(yè)務(wù)邏輯, 這不是控制器應(yīng)該提供的。  一個(gè)UI 控制器應(yīng)該委派給其它給在UI范圍之外的輕量級(jí)組件。 好的框架應(yīng)該能指導(dǎo)代碼如何分布。 更重要的是,框架能把開發(fā)者從編碼中解放出來,使他們能專心于應(yīng)用程序的邏輯(這對(duì)客戶來說很重要)。

這篇文章將討論怎樣結(jié)合幾種著名的框架來使得你的應(yīng)用程序做到松弛耦合。

如何建立你的架構(gòu),并且怎樣讓你的各個(gè)應(yīng)用層保持一致。?如何整合框架以便讓每個(gè)層在以一種松散偶合的方式彼此作用而不用管低層的技術(shù)細(xì)節(jié)?這對(duì)我們來說真是一種挑戰(zhàn)。  這里討論一個(gè)整合框架的策略( 使用3 種受歡迎的開源框架:表示層我們用Struts 業(yè)務(wù)層我們用Spring;而持久層則用Hibernate 你也可以用其他FrameWork替換只要能得到同樣的效果。 見圖1 (框架組合示意圖)

應(yīng)用程序的分層

大部分的Web應(yīng)用在職責(zé)上至少能被分成4層。 這四層是:presentation(描述),persistence(持久),business(業(yè)務(wù))和domain model(域模塊)。每個(gè)層在處理程序上都應(yīng)該有一項(xiàng)明確的責(zé)任, 而不應(yīng)該在功能上與其它層混合,并且每個(gè)層要與其它層分開的,但要給他們之間放一個(gè)通信接口。   我們就從介紹各個(gè)層開始,討論一下這些層應(yīng)該提供什么,不應(yīng)該提供什么。

表示層(The Presentation Layer)

一般來講,一個(gè)典型的Web應(yīng)用的的末端應(yīng)該是表示層。 很多Java發(fā)者也理解Struts所提供的。 象業(yè)務(wù)邏輯之類的被打包到org.apache.struts.Action., 因此,我們很贊成使用Struts這樣的框架。

下面是Struts所負(fù)責(zé)的:

     *  管理用戶的請(qǐng)求,做出相應(yīng)的響應(yīng)。

     *  提供一個(gè)Controller ,委派調(diào)用業(yè)務(wù)邏輯和其它上層處理。

     *  處理異常,拋給Struts Action

     *  為顯示提供一個(gè)模型

     *  UI驗(yàn)證。 

以下條款,不該在Struts顯示層的編碼中經(jīng)常出現(xiàn)。 它們與顯示層無關(guān)的。

     * 直接的與數(shù)據(jù)庫(kù)通信,例如JDBC調(diào)用。

     * 與你應(yīng)用程序相關(guān)聯(lián)的業(yè)務(wù)邏輯以及校驗(yàn)。

     * 事物管理。

在表示層引入這些代碼,則會(huì)帶來高偶合和麻煩的維護(hù)。

持久層(The Persistence Layer)

典型的Web應(yīng)用的另一個(gè)末端是持久層。這里通常是程序最容易失控的地方。開發(fā)者總是低估構(gòu)建他們自己的持久框架的挑戰(zhàn)性。系統(tǒng)內(nèi)部的持續(xù)層不但需要大量調(diào)試時(shí)間,而且還經(jīng)常缺少功能使之變得難以控制,這是持久層的通病。 還好有幾個(gè)ORM開源框架很好的解決了這類問題。尤其是Hibernate。 Hibernatejava提供了OR持久化機(jī)制和查詢服務(wù), 它還給已經(jīng)熟悉SQLJDBC API Java開發(fā)者一個(gè)學(xué)習(xí)橋梁,他們學(xué)習(xí)起來很方便。 Hibernate的持久對(duì)象是基于POJOJava collections。此外,使用Hibernate并不妨礙你正在使用的IDE

請(qǐng)看下面的條目,你在持久層編碼中需要了解的。

查詢對(duì)象的相關(guān)信息的語句。 Hibernate通過一個(gè)OO查詢語言(HQL)或者正則表達(dá)的API來完成查詢。  HQL非常類似于SQL-- 只是把SQL里的tablecolumnsObject和它的fields代替。 你需要學(xué)習(xí)一些新的HQL語言; 不管怎樣,他們?nèi)菀桌斫舛臋n也做的很好。 HQL是一種對(duì)象查詢的自然語言,花很小的代價(jià)就能學(xué)習(xí)它。

*  如何存儲(chǔ),更新,刪除數(shù)據(jù)庫(kù)記錄。

Hibernate這類的高級(jí)ORM框架支持大部分主流數(shù)據(jù)庫(kù),并且他們支持 Parent/child關(guān)系,事物處理,繼承和多態(tài)。

業(yè)務(wù)層(The Business Layer

     一個(gè)典型Web應(yīng)用的中間部分是業(yè)務(wù)層或者服務(wù)層。 從編碼的視角來看,這層是最容易被忽視的一層。 而我們卻往往在UI層或持久層周圍看到這些業(yè)務(wù)處理的代碼,這其實(shí)是不正確的,因?yàn)樗鼘?dǎo)致了程序代碼的緊密偶合,這樣一來,隨著時(shí)間推移這些代碼很難維護(hù)。幸好,針對(duì)這一問題有好幾種Frameworks存在。 最受歡迎的兩個(gè)框架是SpringPicoContainer。 這些為也被稱為microcontainers,他們能讓你很好的把對(duì)象搭配起來。 這兩個(gè)框架都著手于‘依賴注射‘(dependency injection)(還有我們知道的‘控制反轉(zhuǎn)‘Inversion of Control=IoC)這樣的簡(jiǎn)單概念。 這篇文章將關(guān)注于Spring的注射(譯注:通過一個(gè)給定參數(shù)的Setter方法來構(gòu)造Bean,有所不同于Factory, Spring還提供了Setter Injection(type2),Constructor Injection(type3)等方式供我們選擇。  Spring把程序中所涉及到包含業(yè)務(wù)邏輯和DaoObjects——例如transaction management handler(事物管理控制)、Object Factoris(對(duì)象工廠)、service objects(服務(wù)組件)——都通過XML來配置聯(lián)系起來。

后面我們會(huì)舉個(gè)例子來揭示一下Spring 是怎樣運(yùn)用這些概念。 

業(yè)務(wù)層所負(fù)責(zé)的如下:

* 處理應(yīng)用程序的 業(yè)務(wù)邏輯和業(yè)務(wù)校驗(yàn)

* 管理事物

* 允許與其它層相互作用的接口

* 管理業(yè)務(wù)層級(jí)別的對(duì)象的依賴。

* 在顯示層和持久層之間增加了一個(gè)靈活的機(jī)制,使得他們不直接的聯(lián)系在一起。

* 通過揭示 從顯示層到業(yè)務(wù)層之間的Context來得到business services

* 管理程序的執(zhí)行(從業(yè)務(wù)層到持久層)。

域模塊層(The Domain Model Layer

既然我們致力于的是一個(gè)不是很復(fù)雜的Web的應(yīng)用, 我們需要一個(gè)對(duì)象集合,讓它在不同層之間移動(dòng)的。  域模塊層由實(shí)際需求中的業(yè)務(wù)對(duì)象組成 比如, OrderLineItem , Product等等。 開發(fā)者在這層 不用管那些DTOs,僅關(guān)注domain object即可。 例如,Hibernate允許你將數(shù)據(jù)庫(kù)中的信息存放入對(duì)象(domain objects),這樣你可以在連接斷開的情況下把這些數(shù)據(jù)顯示到UI層。 而那些對(duì)象也可以返回給持續(xù)層,從而在數(shù)據(jù)庫(kù)里更新。 而且,你不必把對(duì)象轉(zhuǎn)化成DTOs(這可能似的它在不同層之間的在傳輸過程中丟失),這個(gè)模型使得Java開發(fā)者能很自然運(yùn)用OO,而不需要附加的編碼。

。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【SSH2框架(理論篇)】
使用hibernate的優(yōu)勢(shì)
一篇SSH框架的應(yīng)用介紹
使用Spring框架的好處(轉(zhuǎn)帖)
ssh框架的好處
使用struts+spring+hibernate 組裝web應(yīng)用
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服