什么是PO
PO(Persistence Object 持久化對象)是直接跟持久層數據庫打交道的java Bean (model,entity,bean等叫法都是可以的),里面除了私有的成員變量之外,就只有其對應的set/get方法,
而且其變量一般跟數據庫表中的列幾乎(除了名字)一樣。
什么是VO
VO(Value Object 值對象)除了可以跟PO完全一樣的變量,set/get方法之外,還可以有其他的變量,但是不用其跟數據庫打交道,可以把該對象當做無狀態的對象。
為什么要分開使用?
首先PO是持久化類,其屬性的改變很有可能直接導致數據庫中的數據變化,而不知道原因(為什么我的數據庫中的數據變化了?)。引入了VO之后可以很好
的解決類似的問題,甚至會很好的幫你解決頁面(JSP,freemarker,asp,aspx)和控制層的直接便利的交互,而不用擔心其各種屬性的變化會不會導致數據庫中
數據的變化,這對於使用hibernate之后控制其操作數據時出現的持久化、瞬態、脫管都是有很大好處的。
使用VO注意的問題
使用VO之后要注意其活動范圍要控制在service層、controller層、展現層中,而不要進入dao層甚至是數據庫(一般也不可能影響到數據庫),同樣的PO也
只能出現在dao層和數據庫(數據庫直接和PO交互),而不能夠出現在service層、controller層、展現層中。
所以,PO和VO都會出現在service層,而且也會在service中進行適當轉換。