Recently in Java Category

在撰寫 Java商務應用程式時,常會聽到 PO、VO、POJO... 一推有「O」的名稱,對於初學者來講是非常頭痛的,下面試著簡單說明常聽到的各種「O名稱」。


PO(Persistant Object)
一個 PO 即資料庫裡的一筆記錄。
好處是可以把一筆記錄當作一個物件處理,可以方便的轉換成其他物件。


BO(Business Object)
主要作用是把業務邏輯封裝為一個物件。這個物件可以包括一個或多個其他的物件。
比如一個簡歷,有教育經歷、工作經歷等等
我們可以把教育經歷對應一個PO,工作經歷對應一個PO。
建立一個對應簡歷的BO物件處理簡歷,每個BO包含這些PO。
這樣處理業務邏輯時,我們就可以針對BO去處理。


VO(Value Object)
ViewObject表現層物件
主要對應介面顯示的資料物件。對於一個WEB頁面,或者SWT、SWING的一個介面,用一個VO物件對應整個介面的值。

Entity 與 VO:
Entity 帶有 Identity,VO 沒有帶 Identity,也就是說 Entity 只有異動了 Identity 才算是不同物件,但 VO 只要有屬性被變更了,就視為是不同物件


DTO(Data Transfer Object)
主要用於遠端調用等需要大量傳輸物件的地方。
比如我們一張表有100個欄位,那麼對應的PO就有100個屬性。
但是我們介面上只要顯示10個欄位,用戶端用WEB service來獲取資料,不需要將整個PO物件傳遞到用戶端,
此時即可以用只有10個屬性的DTO來傳遞結果到用戶端,如此亦不會暴露服務端表結構。到達用戶端以後,如果用這個物件來對應介面顯示,那此時它的身份就轉為VO


POJO(Plain Old Java Object or Plain Ordinary Java Object)
只有屬性及getter、setter 的 Java Object
一個POJO持久化以後就是PO
直接用它傳遞、傳遞過程中就是DTO
直接用來對應表示層就是VO


DAO(Data Access Object)
主要用來封裝對資料庫的訪問。通過它可以把POJO持久化為PO,用PO組裝出來VO、DTO

Java將Exception分成二大部份,一種為「Checked Excepiton」,也就是編譯時會提醒您需要加以處理的Exception,例如以下二行程式,

Class.forName(driver); Connection conn = DriverManager.getConnection(connString,account,password );

其中第一行編譯時或開發工具時(如Escape)會提醒「Unhandled exception type ClassNotFoundException」,第二行則會提醒「 Unhandled exception type SQLException」。只要是這類型的,一般都稱為 Checked Exception 。所以Checked Exception 的特點即有問題要額外處理或則往上層拋例外(throws Exception)。


另一種 Exception 則稱為「Runtime Exception」,顧名思義即在執行週期時才會發生的 Exception,常見的 Runtime Exception 為 NullPointerException。Runtime Excepiton 的特點與 Checked Exception 剛好相反,不需在開發週期強制放 try-catch 區段或則往上層拋例外(throws Exception)。

在撰寫 Java 程式時,遇到 java.lang.OutOfMemoryError Heap Memroy爆掉時,如果要額外作一些處理,可以透過以下二種方法

方法一:
try{ //new test().run(); // 會產生outofmemory的 code throw new java.lang.OutOfMemoryError(); }catch ( final OutOfMemoryError e ){ System.out.println("Exceptin 攔截成功了!!"); }
方法二
try{ //new test().run(); // 會產生outofmemory的 code throw new java.lang.OutOfMemoryError(); }catch(Exception ex){ System.out.println("這段 code 會被執行嗎?"); }finally { System.out.println("執行 finally"); }

方法一可以將 Exception 整個攔截下來,並且程式會繼續執行。但是要留意事,如果記憶體沒有正常被釋放,則很快的程式還是會因為 Heap 不足再度爆掉。

方法二裡的 catch 區段程式並不會被執行,而會直接執行 finally 裡的 code ,並且會再往上層拋 java.lang.OutOfMemoryError 的 Exception

一般而言,如果是 Java AP 如果在預知 Memory 會爆掉的地方給予適當的處理,處理方法如發信、寫 Log 或則丟訊息給 User ,這對於使用者而言應該是比較人性化的^^。至於要使用那一種的方式來處理端看需求而定。

December 2010: Monthly Archives





Powered by Movable Type 4.12