1. 程式人生 > >domain、entity和model的package的不同用法

domain、entity和model的package的不同用法

以前寫專案,都是先快速建立entity、dao、service再說,其他的包一般都是根據不同的框架來建立不同功能的包。比如用struts框架建立一個action包,用servlet就建立一個servlet包,用jersey框架就建立一個resource包。但是最近看了一個國外的開源專案原始碼,有一個包叫domain,開啟一看裡面就是存的實體類,功能和我們平時用的entity是一樣的,那為什麼要用domain而不用entity呢,那就涉及到這個包的具體用處了,雖然都是存的實體類,但是用途是不一樣的。
(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.前端需要什麼我們就給什麼
3.domain很少用,代表一個物件模組


以上描述純屬個人觀點,如有錯誤,歡迎指正!