Python 閒談 17——阿里巴巴開發中DO,DTO,VO,Query,AO的區別

Python 閒談 17——阿里巴巴開發中DO,DTO,VO,Query,AO的區別

第一次見阿里巴巴開發中DO,DTO,VO,Query,AO時,整個人都蒙圈啦!

N 年前我們的項目裡可能只有一個 POJO,無論數據庫映射,數據庫查詢返回對象,service 接口返回對象,還是 controller 返回對象,基本都是使用同一個 POJO,在多人協作時,避免不了有人增加屬性,修改 POJO。在前端請求接口時可能暴露很多額外的信息,我們可能會做多餘屬性去除操作。

Python 閒談 17——阿里巴巴開發中DO,DTO,VO,Query,AO的區別

阿里巴巴的分層領域模型規約:

DO(Data Object):此對象與數據庫表結構一一對應,通過 DAO 層向上傳輸數據源對象。


DTO(Data Transfer Object):數據傳輸對象,Service 或 Manager 向外傳輸的對象。


AO(Application Object):應用對象,在 Web 層與 Service 層之間抽象的複用對象模型,極為貼近展示層,複用度不高。


VO(View Object):顯示層對象,通常是 Web 向模板渲染引擎層傳輸的對象。

Query:數據查詢對象,各層接收上層的查詢請求。注意超過 2 個參數的查詢封裝,禁止使用 Map 類來傳輸

為什麼要這麼設計?

Python 閒談 17——阿里巴巴開發中DO,DTO,VO,Query,AO的區別

1、前端頁面不需要數據庫表中的部分字段

如 id、createdTime、creatorId等等,前端頁面根本不需要展示。傳多餘的字段不僅增加傳輸量,而且可能存在安全隱患。

2、數據庫存的數字在前端需要回顯

比如說性別,數據庫可能存的 1,2,3 分別代表 男,女,私密;在前端頁面需要展示中文。

3、為了遵循數據的三大範式,某些字段要展示,但是並不希望出現在數據庫一張表中

比如說我們在 CustomerDO 保存 companyId,前端展示需要顯示公司詳細信息。

所以說光用一個 CustomerDO 並不是一個好的設計。

>>>


分享到:


相關文章: