(1)、entity(實體)
entity的意思就是實體的意思,所以也是最常用到的,entity包中的類是必須和數據庫相對應的,比如說:數據庫有個user表,字段有long類型的id,string類型的姓名,那么entity中的user類也必須是含有這兩個字段的,且類型必須一致。不能數據庫存的是long類型,user類里的屬性是string類型。這樣做的好處是保持實體類和數據庫保持一致,另外,當用到hibernate或是mybatie框架來操作數據庫的時候,操作這個實體類就行,寫sql文之前不需要再做數據格式處理。
(2)、model(模型)
model大家不陌生,都知道是模型的意思,當用model當包名的時候,一般里面存的是實體類的模型,一般是用來給前端用的。比如:前端頁面需要顯示一個user信息,user包含姓名,性別,居住地,這些信息存在數據庫的時候,姓名直接存姓名,但是性別和居住地一般會用數據字典的編號存到數據庫,比如:111代表男,222代表女,數據庫存的就是111或222,如果用entity的話,把111、222前端都不知道是什么玩意,就算前端知道111代表男,222代表女,寫了一個js判斷數據處理。后來數據庫變動了,111代表女,222代表男,前端的js又需要重新寫,很顯然這樣不利於維護。所以就需要model來解決,后台從數據庫取了數據轉化為前端需要的數據直接傳給前端,前端就不需要對數據來處理,直接顯示就行了。還有一種情況,數據庫里面的user表字段有十個,包含姓名,qq,生辰八字亂七八糟的等,但是前台頁面只需要顯示姓名,如果把entity全部傳給前台,無疑傳了很多沒用的數據。這時候model就很好的解決了這個問題,前台需要什么數據,model就包含什么數據就行了
(3)、domain(域)
domain這個包國外很多項目經常用到,字面意思是域的意思。范圍有點廣了,比如一個商城的項目,商城主要的模塊就是用戶,訂單,商品三大模塊,那么這三塊數據就可以叫做三個域,domain包里就是存的就是這些數據,表面上這個包和entity和model包里存的數據沒什么區別,其實差別還是挺大的,特別是一些大型的項目。比如一個招聘網站的項目,最重要的對象就是簡歷了,那么簡歷是怎么存到數據庫的呢,不可能用一張表就能存的,因為簡歷包含基本信息和工作經驗,項目經驗,學習經驗等。基本信息可以存在簡歷表,但是涉及到多條的就不行,因為沒人知道有多少條工作經驗,項目經驗,所以必須要單獨建工作經驗表和項目經驗表關聯到簡歷基本信息表。但是前台頁面是不關心這些的,前台需要的數據就是一個簡歷所有信息,這時就可以用到domain來處理,domain里面的類就是一個簡歷對象,包含了簡歷基本信息以及list的工作經驗,項目經驗等。這樣前端只需要獲取一個對象就行了,不需要同時即要獲取基本信息,還要從基本信息里面獲取工作經驗關聯的簡歷編號,然后再去獲取對應的工作經驗了。
當然,如果用model的話也是可以達到domain的效果的。這個完全是看個人喜好和項目的整體架構,因為創建不同的package的作用本來也就是想把項目分成不同的層,便於管理和維護。如果你樂意,你可以創建entity包,然后在里面存圖片,創建images文件夾,里面存js。你已經看懂就行,前提是如果是團隊開發的話能保證別人不打你。這個和語言一個道理,你在200面前和英國人說:private void set(int age),人家說:滾犢子;現在你這樣說,人家就知道是java語言了。能被人們通用的才叫語言,你說的別人聽不懂那只能算是鳥語。所以開發的時候,建類建包的命名規則規范性還是很重要的。
那么三句話總結下entity、model、domain的不同:
1.entity字段必須和數據庫字段一樣
2.model前端需要什么我們就給什么
3.domain很少用,代表一個對象模塊