2011-02-16 46 views
3

這是一個關於如何緊密地將消息交換綁定到數據模型的設計哲學問題。休眠和JAXB/JSON(消息模型和數據模型)

給定一個實體pojo,我可以使用Hibernate,JAXB和JSON註釋對它進行註釋,以便可以將相同的類寫入數據庫以及序列化/反序列化以進行消息交換。這方面的便利因素非常高,因爲這意味着我不必編寫翻譯類來將消息轉換爲用於數據庫的類(這對於繁瑣和維護來說很重要)。

但是,這一直困擾着我,因爲它將您的界面和消息與數據模型的結構和設計緊密聯繫在一起。對於某些類型的應用程序,這些消息可能正是您想要在數據庫中存儲的內容,而其他時間則是數據庫字段的子集。

有沒有更好的方法來解耦這些,而不必讓自己變得繁瑣的翻譯/轉換類?是否有一種模式可以用來至少更好地耦合消息和數據?

回答

0

我完全同意您的疑慮......這是一個灰色區域,因爲它確實取決於您嘗試解決的域問題。

如果您的項目簡單而直接,那麼我可能只是註釋實體並完成。這樣,消費者(例如:Javascript代碼)基本上挑選出需要在頁面上顯示的數據。在這種情況下,您負責閱讀JSON/XML並執行您喜歡的任何操作。但是,如果您正在編寫Web服務以暴露給其他人,則數據通常來自不同的實體(表連接)。在這種情況下,返回與實際實體結構緊密耦合的如此複雜的JSON/XML是沒有意義的。如果您決定在一天內重構您的實體,那麼您的所有消費者都將受到負面影響。因此,最好創建單獨的bean,以反映供消費者使用的彙總數據,而不是依賴現有的實體bean。這樣,生成的JSON/XML將能夠承受未來的變化並最大限度地減少負面影響。

+0

像往常一樣,沒有銀彈=)我能想到的唯一的事情就是從一個共同的實體開始,永遠不要害怕重構它來分離它。我知道,說起來容易做起來難。我只是希望有一個好的模式或慣例是一個更好的起點。 – Mark 2011-02-16 01:20:01