|
j2ee中,經(jīng)常提到幾種對象(object),理解他們的含義有助于我們更好的理解面向?qū)ο蟮脑O(shè)計思維。
POJO(plain old java object):普通的java對象,有別于特殊的java對象(含繼承約束等)和EJB。POJO一般只有一系列的屬性和相應(yīng)的get、set方法。 PO(persistant object):持久化對象,有別于POJO,必須對應(yīng)數(shù)據(jù)庫中的實體。一個PO對應(yīng)數(shù)據(jù)庫的一條記錄。持久化對象的生命周期與數(shù)據(jù)庫密切相關(guān),只能存在于connection之中,連接關(guān)閉后,PO就消失了。 PO相對于POJO有諸多不同,比如PO中會有保存數(shù)據(jù)庫entity狀態(tài)的屬性和方法。但是ORM(object-relation mapping)追求的目標(biāo)是PO和POJO的一致,所以在程序員的日常開發(fā)中,都是將POJO作為PO使用,而將POJO轉(zhuǎn)化為PO的功能交給hibernate等框架來實現(xiàn)。 DTO(data transfer object):數(shù)據(jù)傳輸對象,以前被稱為值對象(VO,value object),作用僅在于在應(yīng)用程序的各個子系統(tǒng)間傳輸數(shù)據(jù),在表現(xiàn)層展示。與POJO對應(yīng)一個數(shù)據(jù)庫實體不同,DTO并不對應(yīng)一個實體,可能僅存儲實體的部分屬性或加入符合傳輸需求的其他的屬性。 DAO(data access object):數(shù)據(jù)訪問對象。提供訪問數(shù)據(jù)庫的抽象接口,或者持久化機(jī)制,而不暴露數(shù)據(jù)庫的內(nèi)部詳細(xì)信息。DAO提供從程序調(diào)用到持久層的匹配。 BO(business object):業(yè)務(wù)對象。主要是將業(yè)務(wù)邏輯封裝為一個對象,該對象可以包含一個或多個其他對象。如,'Principal'(委托人),有'Name','Age'等屬性,同時和'Employee'(雇員)有1對多的關(guān)系,這個'Principal'就可以作為一個與業(yè)務(wù)相關(guān)的PO。 實踐小結(jié)按照標(biāo)準(zhǔn)來說: 你的html頁面上有三個字段,name,pass,age 這個時候,你就要用到vo了 你要先從頁面上拿到VO,然后判斷dto中的age是不是大于20,如果大于20,就把dto中的 name和pass拿出來,放到vo中,然后在把DTO中的name和pass原封不懂的給entity,然后根據(jù) entity的值,在傳入數(shù)據(jù)庫,這就是他們?nèi)齻€的區(qū)別 |
|
|