假設(shè)我們有一個包含Spring 3.2.4,Hibernate 3.6.10等超過100個實體的大型Web項目.此項目中的大多數(shù)控制器都將基于REST,并將通過JavaScript調(diào)用. 雖然我認(rèn)為在概念上簡單地將實體直接編組/取消編組視圖更容易,但事實證明,在使用Jackson時,這在實踐中非常糟糕.雖然@JsonIgnore可用于避免無限復(fù)發(fā),但有時候這種“一刀切”的注釋并不適用于整個應(yīng)用程序 – 我有時需要一把手術(shù)刀,并且很多時候可以查看一個對象在許多方面. 此外,盡管使用Hibernate模塊為Jackson解決了使用Hibernate時的問題,但在使用Spring MVC測試框架時仍然會遇到一些javaassist延遲初始化問題. 通過簡單地使用ViewModels或DTO可以避免所有上述問題,因此這是我傾向于的方向.不幸的是,創(chuàng)建和維護100多個DTO以及映射到和來的代碼是一項相當(dāng)大的投資. 我也猜測我將不得不為每個DTO編寫自定義JsonDeserializer類,這也是相當(dāng)多的編碼和測試. 最后,我不確定這是否明智,但我懷疑我的驗證規(guī)則將從我的實體移到我的視圖模型上.我可能永遠不會真正需要驗證我的實際實體,但這種方法讓我感到緊張. 有人可以強調(diào)一下在這樣一個項目中實施和映射DTO的一些最佳實踐,并且還提供一些有關(guān)處理Deserializion的最佳方法的見解嗎?我正在尋找能夠輕松維護代碼的實踐,并且希望不會耗費大量手動,耗時的工作. Martin Fowler的匯編方法對我來說有點多.謝謝! 解決方法: 通常,至少在較大的應(yīng)用程序中是我的經(jīng)驗,我們在屏幕上顯示的內(nèi)容與實際的業(yè)務(wù)組件不同(模型方面).你基本上想要的是一個不同的閱讀和寫作領(lǐng)域(CQRS可能是一種方式).
過去對我有用的是,為那些不同的屏幕/模型創(chuàng)建數(shù)據(jù)庫視圖,并在這些視圖上簡單地實現(xiàn)另一個hibernate實體(只讀).確保您可以將原始業(yè)務(wù)實體與您要調(diào)用的實際業(yè)務(wù)邏輯相關(guān)聯(lián). 如果這也有點多,你可能想看看Dozer,它可以幫助你映射/到對象.這樣您就可以在Java中維護轉(zhuǎn)換邏輯,而不必自己編寫所有映射邏輯(您仍需要配置它,但這可能不那么痛苦). 鏈接 來源:https://www./content-1-279801.html |
|