1. 程式人生 > >域模型一定要實現Serializable介面嗎?

域模型一定要實現Serializable介面嗎?

在Web應用的開發中,尤其實在前後端分離的情況下,伺服器端多半會將域模型以REST介面的方式提供給客戶端,於是我在很多WEB應用中,都看到這樣的程式碼:

public class ActionStatus implements Serializable {

    private static final long serialVersionUID = -8633429564140080535L;

    private final int code;

    private final int message;

    /**
     * @param code
     * @param
message */
public ActionStatus(int code, int message) { super(); this.code = code; this.message = message; } /* 餘下的程式碼略 */ }

那麼問題來了,為什麼我們所有的域模型都要實現Serializable介面呢?

1. 將域模型轉換為JSON時需要序列化

將域模型轉換為JSON實際上就是將JAVA物件轉換為字串的過程,完全不需要任何序列化操作,無論時Jackson的ObjectMapper,還是google的Gson框架,都沒有要求轉換的物件必須實現序列化介面。

所以,雖然JAVA物件與JSON之間的互轉也涉及到序列化與飯序列化的概念,但與Serializable介面完全是兩個概念。

2. 資料儲存一定需要序列化

在JAVA EE 7規範中,域模型(@Entity)完全可以不用實現Serializable介面,資料儲存依舊可以順利進行,所以,序列化對資料儲存也不是必需的。

3. Serializable介面只是個標記介面,實不實現無所謂

強行實現Serializable介面,不僅不會對程式有任何幫助,很多時候還會起到相反的作用,例如加重了SOA框架的耦合性,降低了安全性、效能以及增加了程式版本相容的難度。

結論

實現Serializable介面在大部分的情況下都是不必要的,除非是以IIOP或這JRMP (RMI)協議 傳輸資料,或者需要將資料快取到有叢集的HTTP-Session中(因為需要保證Session的完整性,經常需要將Session序列化以便於備份與共享),再或者是將資料快取到本地檔案系統中。