2009-11-14 89 views
1

我目前正在使用在線應用程序,需要多個屏幕/步驟才能完成。應用程序域使用對象圖進行建模。從數據庫持久化和使用ORM包完成。對象圖/持久性問題

隨着我在屏幕上的進展,我建立了對象圖。在屏幕之間,我將對象圖序列化/反序列化到當前會話。到達最終屏幕時,對象圖形已完成,並將其存儲在我的數據庫中。

我的問題是以下。我不太關心像工作單元這樣的模式。我只是想知道是否事先構建了對象圖,然後在我通過屏幕前進行填充並最終保存它是一種可行的策略。或者也許可以通過屏幕填充/序列化/反序列化單個對象,然後在堅持數據庫之前構建最終對象圖可能更有意義。或者如果有一個更好的方法。

我選擇暫時堅持會議,因爲我收集的作品,因爲如果用戶放棄這個過程它會過期,我將不必搜索數據庫來清除被遺棄的應用程序。

我希望我的問題說得很清楚。這似乎很常見。

編輯:

我與我的對象圖的方法主要關注的是,雖然我在域模型我的工作,我覺得每次我需要更新它的一部分時間像我招致反序列化的成本/序列化整個圖。也許我應該在我的屏幕和最終域模型之間有一箇中間抽象。我使用ASP.NET/C#作爲我的實現平臺。

+0

您是否擔心基於某些衡量業績問題的成本?如果不是,那麼我首先模擬你認爲會很昂貴的行爲,並且看看它是否與你的交通計劃有關。節省您對實際問題的擔憂,而不是更多的潛在問題。 – 2009-11-14 04:45:05

+0

目前還不清楚哪些要求導致您失敗。最後一次保存失敗時是否可以回滾?用戶是否需要從「嚮導」中間恢復?在沒有幫助的情況下提供指導很難了解你正在工作的限制條件。 – 2009-11-14 12:12:36

+0

不需要回滾。如果用戶在中途放棄,那麼也可以,因此不需要保存部分應用程序。這是一系列簡單的屏幕。我只是試圖組織屏幕之間的流程儘可能簡單。 – Rudy 2009-11-14 20:00:48

回答

1

我最後一次寫這樣的應用程序時,每一步都有獨特的模型 - 數據實體和用戶界面(主要是)之間的一對一關聯。使對象保持小型化並限制工作流程,可以更輕鬆地對單個步驟進行更改或重新排序工作流程,而不會強制重寫應用程序。

+0

@Jarrett你是指很多包含大對象或獨立對象的小對象? ..只是一個疑問。 。感謝 – 2009-11-14 14:16:11

+0

只是與小桌子有關的小物件。我使用SQL視圖來重新構建「大對象」。 – 2009-11-15 13:09:16

0

我會說目前的方法有一個可能的(高級別)問題,那就是用戶的工作直到最後纔會被保存。如果屏幕需要很長時間才能完成,則效果不佳。

1

我會親自去與選項

填充/串行化/通過屏幕反序列化單個對象,然後就堅持到數據庫

有2個原因之前建造的最後對象圖。首先,如果您使用較小的模塊構建應用程序,並最終將對象圖形拼接在一起,則應該使單元測試更容易,並允許重用零件/屏幕流。

第二,隨着需求隨着時間的推移而變化,您很可能需要使用其他屏幕流,這意味着您無法事先構建對象圖並需要隨時構建對象。

在發佈我的答案時,我假定您已經選擇了適合業務需求的正確技術模型(請參閱@Stephen C的評論)。

2

我認爲在HTTPSession中建立會話狀態並在最後提交是完全有效的。如果您在這種情況下需要故障切換,您總是可以使用Terracotta clustered sessions,這會將您的HTTPSession狀態存儲在Terracotta服務器中(具有不同級別的持久性)。具有會話的服務器可能會死亡,Terracotta可能會在另一個節點上重新啓動它。

您也可以查看Spring Webflow - 它處理流狀態中的這種場景(也存儲在會話中)。

+0

您會使用每個屏幕的組件構建會話狀態,還是通過拉動對象圖形進行更新,然後將其保存回去? – Rudy 2009-11-14 04:25:18

+0

我相信WebFlow,您可以定義具有頁面或流程範圍的狀態。我想我會爲你的應用做些有意義的事情。 – 2009-11-14 13:46:56

0

什麼會預先建設好?如果你不關心工作單位和長期的業務交易問題,那麼你的策略是最適合你的情況...

+0

我認爲這更多的是實現效率問題/易用性。隨着屏幕的進展,更新對象圖形是非常直觀的,但是,有時會感覺麻煩。所以我只想看看其他人會如何處理這種情況。 – Rudy 2009-11-14 04:28:33