service是業(yè)務(wù)層,DAO (Data Access Object) 數(shù)據(jù)訪問
1.JAVA中Action層, Service層 矛双,modle層 和 Dao層的功能區(qū)分炫加?(下面所描述的service層就是biz)
首先這是現(xiàn)在最基本的分層方式蛹找,結(jié)合了SSH架構(gòu)沈矿。modle層就是對應(yīng)的數(shù)據(jù)庫表的實體類惦辛。
Dao層是使用了Hibernate連接數(shù)據(jù)庫、操作數(shù)據(jù)庫(增刪改查)悦穿。
以上的Hibernate攻礼,Struts,都需要注入到Spring的配置文件中栗柒,Spring把這些聯(lián)系起來礁扮,成為一個整體。
其他答案:
action 是業(yè)務(wù)層的一部分瞬沦,是一個管理器 (總開關(guān))(作用是取掉轉(zhuǎn))(取出前臺界面的數(shù)據(jù)太伊,調(diào)用biz方法,轉(zhuǎn)發(fā)到下一個action或者頁面)
模型成(model)一般是實體對象(把現(xiàn)實的的事物變成java中的對象)作用是一暫時存儲數(shù)據(jù)方便持久化(存入數(shù)據(jù)庫或者寫入文件)而是 作為一個包裹封裝一些數(shù)據(jù)來在不同的層以及各種java對象中使用
dao是數(shù)據(jù)訪問層 就是用來訪問數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)的持久化(把內(nèi)存中的數(shù)據(jù)永久保存到硬盤中 其他答案:
Action是一個控制器 Dao主要做數(shù)據(jù)庫的交互工作 Modle 是模型 存放你的實體類 Biz 做相應(yīng)的業(yè)務(wù)邏輯處理
2.java中dao層和biz層的區(qū)別是什么逛钻?
呵呵僚焦,這個問題我曾經(jīng)也有過,記得以前剛學(xué)編程的時候绣的,都是在service里直接調(diào)用dao叠赐,service里面就new一個dao類對象,調(diào)用屡江,其他有意義的事沒做芭概,也不明白有這個有什么用,參加工作久了以后就會知道惩嘉,業(yè)務(wù)才是工作中的重中之重罢洲。
我們都知道,標(biāo)準(zhǔn)主流現(xiàn)在的編程方式都是采用MVC綜合設(shè)計模式文黎,MVC本身不屬于設(shè)計模式的一種惹苗,它描述的是一種結(jié)構(gòu),最終目的達(dá)到解耦耸峭,解耦說的意思是你更改某一層代碼桩蓉,不會影響我其他層代碼,如果你會像spring這樣的框架劳闹,你會了解面向接口編程院究,表示層調(diào)用控制層,控制層調(diào)用業(yè)務(wù)層本涕,業(yè)務(wù)層調(diào)用數(shù)據(jù)訪問層业汰。初期也許都是new對象去調(diào)用下一層,比如你在業(yè)務(wù)層new一個DAO類的對象菩颖,調(diào)用DAO類方法訪問數(shù)據(jù)庫样漆,這樣寫是不對的,因為在業(yè)務(wù)層中是不應(yīng)該含有具體對象晦闰,最多只能有引用放祟,如果有具體對象存在,就耦合了鹅髓。當(dāng)那個對象不存在舞竿,我還要修改業(yè)務(wù)的代碼,這不符合邏輯窿冯。好比主板上內(nèi)存壞了骗奖,我換內(nèi)存,沒必要連主板一起換醒串。我不用知道內(nèi)存是哪家生產(chǎn)执桌,不用知道多大容量,只要是內(nèi)存都可以插上這個接口使用芜赌。這就是MVC的意義仰挣。 接下來說你感覺service的意義,其實因為你現(xiàn)在做東西分層次不是那么嚴(yán)格缠沈,在一個你們做東西業(yè)務(wù)本身也少膘壶,舉個最簡單的例子错蝴,你做一個分頁的功能,數(shù)據(jù)1000條颓芭,你20條在一個頁顷锰,你可以把這個功能寫成工具類封裝起來,然后在業(yè)務(wù)層里調(diào)用這個封裝的方法亡问,這才是業(yè)務(wù)里真正干得事官紫,只要沒訪問數(shù)據(jù)庫的,都要在業(yè)務(wù)里寫州藕。
再有不明白的追問束世,這是經(jīng)驗問題,呵呵床玻,其實以后你就會懂毁涉。只是剛開始寫的代碼都是有個請求,我就去數(shù)據(jù)庫取锈死,業(yè)務(wù)幾乎沒有薪丁。
其他優(yōu)秀答案:
(1)、假設(shè)現(xiàn)在你做這個功能會用到user表和權(quán)限表馅精,那么你前臺的頁面訪問action严嗜,action再去調(diào)用用戶模塊service,用戶模塊service判斷你是操作user表還是權(quán)限表洲敢,如果你操作的是user表則service的實現(xiàn)類就去調(diào)用userDAO漫玄。如果是操作的是權(quán)限表則調(diào)用權(quán)限的DAO
(2)、也就是說DAO一定是和數(shù)據(jù)庫的每張表一一對應(yīng)压彭,而service則不是睦优。明白的沒?其實你一個項目一個service和一個DAO其實也一樣可以操作數(shù)據(jù)庫壮不,只不過那要是表非常多汗盘,出問題了,那找起來多麻煩询一,而且太亂了
(3)隐孽、好處就是你的整個項目非常系統(tǒng)化,和數(shù)據(jù)庫的表能一致健蕊,而且功能模塊化菱阵,這樣以后維護(hù)或者改錯比較容易,性能也高一些
至于你說的為什么要用service層封裝缩功,我認(rèn)為:一般來說晴及,某一個程序的有些業(yè)務(wù)流程需要連接數(shù)據(jù)庫,有些不需要與數(shù)據(jù)庫打交道而直接是一些業(yè)務(wù)處理嫡锌,這樣就需要我們整合起來到service中去虑稼,這樣可以起到一個更好的開發(fā)與維護(hù)的作用琳钉,同時也是MVC設(shè)計模式中model層功能的體現(xiàn)
3.java中的action是什么,DAO又是什么蛛倦?
Action類 是[獲得Form表單數(shù)據(jù)槽卫,并處理邏輯的類
DAO(Data Access Object) 是一個接口實現(xiàn)[通過SessionFactory獲得操作數(shù)據(jù)庫的會話,并實現(xiàn)一些基本的刪除 添加 修改數(shù)據(jù)胰蝠,在servlet中更實際化業(yè)務(wù)操作]
4. 什么是Pojo類?
簡單的Java對象(Plain Old Java Objects)實際就是普通JavaBeans,使用POJO名稱是為了避免和EJB混淆起來, 而且簡稱比較直接. 其中有一些屬性及其getter setter方法的類,有時可以作為value object或dto(Data Transform Object)來使用.當(dāng)然,如果你有一個簡單的運算屬性也是可以的,但不允許有業(yè)務(wù)方法,也不能攜帶有connection之類的方法震蒋。
5.pojo類和vo類分別是什么
vo有兩種說法,一個是viewObject,一個是valueObject..;就拿前者來說吧,它只負(fù)責(zé)封裝頁面?zhèn)鬟f過來的數(shù)據(jù),這和PO有些不同..
就拿struts1來說,ActionForm就是一個典型的viewObject. 而valueObject是頁面與頁面之間的傳遞時保存值的對象....
總的來說,PO是最終傳給BO以及BO傳個DAO的東西,他很多情況下與我們真正的數(shù)據(jù)庫表想對應(yīng).
而viewObject是一個頁面上提交后的數(shù)據(jù),不一定完全和PO的屬性相同....
pojo與DTO的區(qū)別
ational Mapping(對象關(guān)系映射)的縮寫茸塞。java(PO,VO,TO,BO,DAO,POJO)解釋
PO(persistant object) 持久對象
在o/r映射的時候出現(xiàn)的概念,如果沒有o/r映射查剖,沒有這個概念存在了钾虐。通常對應(yīng)數(shù)據(jù)模型(數(shù)據(jù)庫),本身還有部分業(yè)務(wù)邏輯的處理∷褡可以看成是與數(shù)據(jù)庫中的表相映射的java對象效扫。最簡單的PO就是對應(yīng)數(shù)據(jù)庫中某個表中的一條記錄,多個記錄可以用PO的集合直砂。PO中應(yīng)該不包含任何對數(shù)據(jù)庫的操作菌仁。
VO(value object) 值對象
通常用于業(yè)務(wù)層之間的數(shù)據(jù)傳遞,和PO一樣也是僅僅包含數(shù)據(jù)而已静暂。但應(yīng)是抽象出的業(yè)務(wù)對象,可以和表對應(yīng),也可以不,這根據(jù)業(yè)務(wù)的需要.個人覺得同DTO(數(shù)據(jù)傳輸對象),在web上傳遞济丘。
TO(Transfer Object),數(shù)據(jù)傳輸對象
在應(yīng)用程序不同tie(關(guān)系)之間傳輸?shù)膶ο?/p>
BO(business object) 業(yè)務(wù)對象
從業(yè)務(wù)模型的角度看,見UML元件領(lǐng)域模型中的領(lǐng)域?qū)ο笄⒅7庋b業(yè)務(wù)邏輯的java對象,通過調(diào)用DAO方法,結(jié)合PO,VO進(jìn)行業(yè)務(wù)操作摹迷。
POJO(plain ordinary java object) 簡單無規(guī)則java對象
純的傳統(tǒng)意義的java對象。就是說在一些Object/Relation Mapping工具中郊供,能夠做到維護(hù)數(shù)據(jù)庫表記錄的persisent object完全是一個符合Java Bean規(guī)范的純Java對象峡碉,沒有增加別的屬性和方法。我的理解就是最基本的Java Bean驮审,只有屬性字段及setter和getter方法鲫寄!。
DAO(data access object) 數(shù)據(jù)訪問對象
是一個sun的一個標(biāo)準(zhǔn)j2ee設(shè)計模式疯淫,這個模式中有個接口就是DAO塔拳,它負(fù)持久層的操作。為業(yè)務(wù)層提供接口峡竣。此對象用于訪問數(shù)據(jù)庫靠抑。通常和PO結(jié)合使用,DAO中包含了各種數(shù)據(jù)庫的操作方法适掰。通過它的方法,結(jié)合PO對數(shù)據(jù)庫進(jìn)行相關(guān)的操作颂碧。夾在業(yè)務(wù)邏輯與數(shù)據(jù)庫資源中間荠列。配合VO, 提供數(shù)據(jù)庫的CRUD操作...
O/R Mapper 對象/關(guān)系 映射
定義好所有的mapping之后,這個O/R Mapper可以幫我們做很多的工作载城。通過這些mappings,這個O/R Mapper可以生成所有的關(guān)于對象保存肌似,刪除,讀取的SQL語句诉瓦,我們不再需要寫那么多行的DAL代碼了川队。
實體Model(實體模式)
DAL(數(shù)據(jù)訪問層)
IDAL(接口層)
DALFactory(類工廠)
BLL(業(yè)務(wù)邏輯層)
BOF Business Object Framework 業(yè)務(wù)對象框架
SOA Service Orient Architecture 面向服務(wù)的設(shè)計
EMF Eclipse Model Framework Eclipse建模框架
PO:全稱是persistant object持久對象
最形象的理解就是一個PO就是數(shù)據(jù)庫中的一條記錄睬澡。
好處是可以把一條記錄作為一個對象處理固额,可以方便的轉(zhuǎn)為其它對象。
BO:全稱是business object:業(yè)務(wù)對象
主要作用是把業(yè)務(wù)邏輯封裝為一個對象煞聪。這個對象可以包括一個或多個其它的對象斗躏。比如一個簡歷,有教育經(jīng)歷昔脯、工作經(jīng)歷啄糙、社會關(guān)系等等。
我們可以把教育經(jīng)歷對應(yīng)一個PO云稚,工作經(jīng)歷對應(yīng)一個PO隧饼,社會關(guān)系對應(yīng)一個PO。
建立一個對應(yīng)簡歷的BO對象處理簡歷静陈,每個BO包含這些PO桑李。
這樣處理業(yè)務(wù)邏輯時,我們就可以針對BO去處理窿给。
VO :value object值對象,ViewObject表現(xiàn)層對象
主要對應(yīng)界面顯示的數(shù)據(jù)對象贵白。對于一個WEB頁面,或者SWT崩泡、SWING的一個界面禁荒,用一個VO對象對應(yīng)整個界面的值。
DTO :Data Transfer Object數(shù)據(jù)傳輸對象
主要用于遠(yuǎn)程調(diào)用等需要大量傳輸對象的地方角撞。
比如我們一張表有100個字段呛伴,那么對應(yīng)的PO就有100個屬性。
但是我們界面上只要顯示10個字段谒所,客戶端用WEB service來獲取數(shù)據(jù)热康,沒有必要把整個PO對象傳遞到客戶端,這時我們就可以用只有這10個屬性的DTO來傳遞結(jié)果到客戶端劣领,這樣也不會暴露服務(wù)端表結(jié)構(gòu).到達(dá)客戶端以后姐军,如果用這個對象來對應(yīng)界面顯示,那此時它的身份就轉(zhuǎn)為VO
POJO :plain ordinary java object 簡單java對象個人感覺POJO是最常見最多變的對象,是一個中間對象奕锌,也是我們最常打交道的對象著觉。
一個POJO持久化以后就是PO直接用它傳遞、傳遞過程中就是DTO直接用來對應(yīng)表示層就是VO
DAO:data access object數(shù)據(jù)訪問對象
這個大家最熟悉惊暴,和上面幾個O區(qū)別最大饼丘,基本沒有互相轉(zhuǎn)化的可能性和必要.
主要用來封裝對數(shù)據(jù)庫的訪問。通過它可以把POJO持久化為PO辽话,用PO組裝出來VO肄鸽、DTO