一、基本定義
PO(Persistence Object 持久化對象)是直接跟持久層數據庫打交道的java Bean (model,entity,bean等叫法都是能夠的),裏面除了私有的成員變量以外,就只有其對應的set/get方法,
並且其變量通常跟數據庫表中的列幾乎(除了名字)同樣。
VO(Value Object 值對象)除了能夠跟PO徹底同樣的變量,set/get方法以外,還能夠有其餘的變量,可是不用其跟數據庫打交道,能夠把該對象當作無狀態的對象。
二、爲何要使用VO,而不直接都用PO代替?
首先PO是持久化類,其屬性的改變頗有可能直接致使數據庫中的數據變化,而不知道緣由(爲何個人數據庫中的數據變化了?)。引入了VO以後能夠很好
的解決相似的問題,甚至會很好的幫你解決頁面(JSP,freemarker,asp,aspx)和控制層的直接便利的交互,而不用擔憂其各類屬性的變化會不會致使數據庫中
數據的變化,這對於使用hibernate以後控制其操做數據時出現的持久化、瞬態、脫管都是有很大好處的。
三、使用VO以後應該注意的問題
使用VO以後要注意其活動範圍要控制在service層、controller層、展示層中,而不要進入dao層甚至是數據庫(通常也不可能影響到數據庫),一樣的PO也
只能出如今dao層和數據庫(數據庫直接和PO交互),而不可以出如今service層、controller層、展示層中。
因此,PO和VO都會出如今service層,並且也會在service中進行適當轉換。java