2010-07-16 108 views
3

我在思考設計問題時遇到了一些麻煩,並認爲社區可能會幫助我指出正確的方向。我正在模擬我公司的員工管理系統,並且遇到了一個讓我難以置信的設計問題。設計幫助 - 對象修改並保存另一個對象

下面是這種情況:

我有一個Employee類具有Office對象的列表(如僱員的作品,並致力於)一個Employee類。我有一個要求來創建在辦公室之間轉移員工的能力。轉賬申請(審批,審覈)有一些額外的開銷,但最終批准我的轉讓對象應該導致更改員工對象辦公室清單。

我對我的對象使用C#,EF4和POCO。我不知道如何建模傳輸對象。這將持續一段時間,可能會在幾天內完成(批准必須在其允許繼續之前完成)。轉移對象需要知道要修改的員工以及員工的新辦公室。我覺得讓員工成爲Transfer對象的孩子並在那裏修改它是不好的設計。我只是想知道是否有人對如何建立這個要求建模有什麼建議。

回答

3

您可以將傳輸視爲一個完全獨立的對象 - 一個EmployeeTransfer。

它至少包含以下數據: 1.員工的唯一標識符。 2.從辦公室轉移的唯一標識符。 3.轉移到辦公室的唯一標識符。 4.轉移進度狀態指示器。

這是一個輕量級對象,不包含任何其他對象 - 它通過唯一標識符引用它們。處理轉移時,驗證員工和轉移辦公室仍然有效,然後更新員工辦公室集合。

此解決方案的唯一先決條件是員工和辦事處必須在創建轉移之前存在。

+1

這是我會走的路。通過明確地將其定義爲**商業概念**,它非常適合DDD。它還使您可以選擇持續保存這些* Transfer *對象 - 爲您提供**審計追蹤**,只需少量額外的工作。 – 2010-07-20 05:15:55

0

聽起來像Transfer不是一個對象,它是一個工作流程。看看Windows Workflow Foundation ...這裏有一個good QuickStart example.

+0

我一直在查看WF4文檔。看起來,這將是一個完全可以接受的批准/審覈流程。微軟有一些很好的例子,幾乎可以確切顯示我正在嘗試做什麼。 – Aver 2010-07-19 15:39:40

+0

@太棒了!如果這個或其他答案解決了您的問題,請通過單擊答案旁邊的大號複選標記來指明。 – 2010-07-19 16:02:25

+0

工作流是一種不能自動解決設計問題的工具。因此 - 反對票。 – 2010-07-23 08:18:15

0

如果你考慮Transfer對象的責任,它將管理員工轉移到另一個Office。我將設計這與轉讓對象與僱員和辦公室分開,但有一個參考每個。 Transfer對象可能具有Enum的批准狀態值,並且在達到最終狀態(取消或最終批准)時,Transfer對象可以執行將Employee與新Office關聯並將其標記爲已完成的操作。 Transfer對象具有對其他對象的引用並不錯。在這種情況下,轉移和員工(以及轉移和辦公室)之間的關係是「使用」關係。

+0

我的下一個問題就是堅持改變。所以我的傳輸對象有Transfer.Employee和一些Finalize()方法來完成傳輸(更新僱員對象)。此時就像從Transfer對象獲取員工對象並將其附加到我的上下文一樣簡單? – Aver 2010-07-16 16:47:34

相關問題