2014-02-14 49 views
2

那麼我想知道如何在數據映射器中給定Java的ResultSet對象來創建域模型。我閱讀Martin Fowler的書,在他的例子中,他將ResultSet中的每個字段加載到數據映射器的方法中的局部變量中,該方法創建領域模型,然後將所有這些局部變量逐個傳遞給領域模型的構造函數。如何使用數據映射器模式使用java結果集創建域模型?

問題是,它只有在表格包含2-5列時才起作用,否則最終會有10個以上的局部變量和一個接受10個以上參數的構造函數。我不喜歡接受超過5個參數的構造函數或方法,10+太多了。不要提到我的領域模型的構造函數也有依賴注入的爭論,比如UnitOfWork。總之,我不想搞亂構造函數的簽名。

我有兩種可能的解決方案,但都似乎有問題。我完全可以將整個ResultSet傳遞到域模型的構造函數中,這樣構造函數將只有2-3個參數。這也涉及到一個問題,領域模型和領域層現在意識到了ResultSet的存在。據我所知,數據映射器應該作爲域模型和結果集之間的中介。如果域模型直接操作結果集,那麼這是一個糟糕的體系結構設計。從長遠來看,這將導致更多的問題。

我也可以先創建一個空域模型,然後使用其setter方法爲其字段添加值。這種方法的問題在於,我有一個UnitOfWork將域模型的狀態監視爲新的,髒的,刪除或清理的。 UnitOfWork的機制是,無論何時域模型的setter方法被調用,它都會將該對象標記爲骯髒並等待數據庫更新。因此,每次調用setter時,使用空域模型+ setter方法都會導致對象被標記爲dirty。即使我可以在返回它之前將域模型標記爲乾淨,但在加載對象集合時,整個過程仍然很慢。

那麼你怎麼看?給定一個既優雅又不耗費資源的Java結果集,是否有另一種方法來創建域模型?我沒有想法...

回答

相關問題