bean包、entity包、mode包、domain包的区别
文章目錄
- bean
- entity
- model
- domain
- 總結(jié)
bean
包含的都是 JavaBean。
JavaBean 是一種 Java 語(yǔ)言寫成的可重用組件。為寫成 JavaBean,類必須是具體和公共的,并且具有無參數(shù)的構(gòu)造器。JavaBean 通過提供符合一致性設(shè)計(jì)模式的公共方法將內(nèi)部域暴露成屬性。JavaBean 主要指的是一種規(guī)范,即包含一組 set 和 get 方法的類。JavaBean 可以使應(yīng)用程序更加面向?qū)ο?#xff0c;可以把數(shù)據(jù)封裝起來,把應(yīng)用的業(yè)務(wù)邏輯和顯示邏輯分離開,降低了開發(fā)的復(fù)雜程度和維護(hù)成本。
和 Entity Bean 的區(qū)別是,JavaBean 可以包含業(yè)務(wù)邏輯代碼,并且不一定與數(shù)據(jù)表對(duì)應(yīng)。
entity
包含的都是實(shí)體 bean,即 Entity Bean。
entity 的意思就是實(shí)體的意思,所以也是最常用到的,entity 包中的類是必須和數(shù)據(jù)庫(kù)中的表相對(duì)應(yīng)的,比如說:數(shù)據(jù)庫(kù)有個(gè) user 表,字段有 bigint 類型的 id,varchar 類型的姓名,那么 entity 包中的 User 類也必須是含有這兩個(gè)字段的,且類型必須一致。不能數(shù)據(jù)庫(kù)存的是 bigint 類型,User 類里的對(duì)應(yīng)屬性是 String 類型。這樣做的好處是實(shí)體類和數(shù)據(jù)庫(kù)保持一致,當(dāng)用到 hibernate 或 mybatie 框架來操作數(shù)據(jù)庫(kù)的時(shí)候,操作這個(gè)實(shí)體類就行,寫 sql 之前不需要再做數(shù)據(jù)類型的處理。
model
model 大家不陌生,都知道是模型的意思,當(dāng)用 model 當(dāng)包名的時(shí)候,一般里面存的是實(shí)體類的模型,一般是用來給前端用的。比如:前端頁(yè)面需要顯示一個(gè) user 信息,user 包含姓名、性別、所在地區(qū),這些信息存在數(shù)據(jù)庫(kù)的時(shí)候,姓名直接存姓名,但是性別和所在地區(qū)一般會(huì)用數(shù)據(jù)字典的編號(hào)存到數(shù)據(jù)庫(kù),比如:1 代表男,2 代表女,數(shù)據(jù)庫(kù)存的就是 1 或 2,如果用 entity 的話,把 1、2 返回給前端,前端可能并不知道這是什么玩意,就算前端知道 1 代表男,2 代表女,也需要額外寫一個(gè) js 進(jìn)行判斷和相關(guān)的數(shù)據(jù)轉(zhuǎn)換處理。如果后來數(shù)據(jù)庫(kù)變動(dòng)了,1 代表女,2 代表男,前端的 js 又需要重新寫,很顯然這樣不利于維護(hù)。所以就需要 model 來解決,后端從數(shù)據(jù)庫(kù)取了數(shù)據(jù)轉(zhuǎn)化為前端需要的數(shù)據(jù)后再傳給前端,前端就不需要對(duì)數(shù)據(jù)進(jìn)行額外的處理,直接顯示就行了。還有一種情況,數(shù)據(jù)庫(kù)里面的 user 表字段有很多個(gè),但是前端頁(yè)面只需要顯示姓名,如果把 entity 全部傳給前端,無疑傳了很多沒用的數(shù)據(jù)。這時(shí)候 model 就很好的解決了這個(gè)問題,前端需要什么數(shù)據(jù),model 就包含什么數(shù)據(jù)就行了。
model 是 MVC 中的概念,其中的類大部分是 POJO 類,用來給 View 組件提供要展示的數(shù)據(jù),例如,用戶個(gè)人信息界面,就可以將個(gè)人有關(guān)的所有信息封裝成一個(gè) POJO 對(duì)象,再將這個(gè)對(duì)象返回給客戶端,客戶端就可以解析里面的數(shù)據(jù)進(jìn)行展示了。
一個(gè) POJO 類如果都是用來提供展示數(shù)據(jù)的,那么就叫 VO,如果是用來傳遞數(shù)據(jù)的,就叫 DTO。例如,可以在視圖層中,將用戶請(qǐng)求參數(shù)數(shù)據(jù)封裝成一個(gè) VO 對(duì)象,再封裝成 DTO 對(duì)象,再調(diào)用業(yè)務(wù)層的方法,將 DTO 對(duì)象作為參數(shù)進(jìn)行傳遞,業(yè)務(wù)層根據(jù) DTO 的數(shù)據(jù)進(jìn)行相關(guān)業(yè)務(wù)的處理,再將數(shù)據(jù)封裝成 DO 對(duì)象,再調(diào)用 DAO 的相關(guān)方法,將 DO 對(duì)象作為參數(shù)傳遞。DAO 對(duì)象就可以根據(jù) DO 的數(shù)據(jù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作(增刪改查)。
domain
domain 這個(gè)包國(guó)外很多項(xiàng)目經(jīng)常用到,字面意思是域的意思。比如一個(gè)商城的項(xiàng)目,商城主要的模塊就是用戶,訂單,商品三大模塊,那么這三塊數(shù)據(jù)就可以叫做三個(gè)域,domain 包里存放的就是這些數(shù)據(jù),表面上這個(gè)包和 entity 和 model 包里存的數(shù)據(jù)沒什么區(qū)別,其實(shí)差別還是挺大的,特別是一些大型的項(xiàng)目。比如一個(gè)招聘網(wǎng)站的項(xiàng)目,最重要的對(duì)象就是簡(jiǎn)歷了,那么簡(jiǎn)歷是怎么存到數(shù)據(jù)庫(kù)的呢,不可能用一張表就能存的,因?yàn)楹?jiǎn)歷包含基本信息和工作經(jīng)驗(yàn),項(xiàng)目經(jīng)驗(yàn),學(xué)習(xí)經(jīng)驗(yàn)等。基本信息可以存在簡(jiǎn)歷表,但是涉及到多條的就不行,因?yàn)闆]人知道有多少條工作經(jīng)驗(yàn),項(xiàng)目經(jīng)驗(yàn),所以必須要單獨(dú)建工作經(jīng)驗(yàn)表和項(xiàng)目經(jīng)驗(yàn)表關(guān)聯(lián)到簡(jiǎn)歷基本信息表。但是前端頁(yè)面是不關(guān)心這些的,前端需要的數(shù)據(jù)就是一個(gè)簡(jiǎn)歷所有的信息,這時(shí)就可以用 domain 來處理,domain 里面的類就是一個(gè)簡(jiǎn)歷對(duì)象,包含了簡(jiǎn)歷基本信息以及工作經(jīng)驗(yàn),項(xiàng)目經(jīng)驗(yàn)等。這樣前端只需要獲取一個(gè)對(duì)象就行了,不需要獲取基本信息的同時(shí),還要從基本信息里面獲取簡(jiǎn)歷編號(hào),再拿著簡(jiǎn)歷編號(hào)去獲取相關(guān)的工作經(jīng)驗(yàn)、項(xiàng)目經(jīng)驗(yàn)等信息。
當(dāng)然,model 也是可以達(dá)到 domain 的效果。這個(gè)完全是看個(gè)人喜好和項(xiàng)目的整體架構(gòu),因?yàn)閯?chuàng)建不同的 package 的作用本來也就是想把項(xiàng)目分成不同的層,便于管理和維護(hù)。如果你樂意,你可以創(chuàng)建 entity 包,然后在里面存圖片,創(chuàng)建 images 文件夾,里面存 js,只是你自己看得懂還不夠,你還要保證你的團(tuán)隊(duì)不會(huì)打死你。所以開發(fā)的時(shí)候,建類建包的命名規(guī)范性還是很重要的。
總結(jié)
那么三句話總結(jié)下entity、model、domain的不同:
1.entity 字段必須和數(shù)據(jù)庫(kù)字段一樣
2.model 前端需要什么我們就給什么
3.domain 代表一個(gè)對(duì)象模塊
總結(jié)
以上是生活随笔為你收集整理的bean包、entity包、mode包、domain包的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IntelliJ IDEA for Ma
- 下一篇: IntelliJ IDEA for Ma