2010-07-16 60 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