MVVM使用EF,DataAccess设计问题

时间:2010-01-19 21:27:45

标签: .net entity-framework mvvm repository

首先。抱歉我的英语,我还在学习:)

我目前正在与MVVM模型搏斗。

  • 在底部,我有一个数据库。
  • 最重要的是我的DAL,它基本上是ADO.NET实体框架。 *请注意,不同的实体也是我的业务对象(因为我在其中包含验证)。
  • 除此之外,我还有一个存储库类,用于定义应用程序中所需的不同查询。
  • 最重要的是,我得到了界面,其他组件和单元测试之类的东西,但我认为这不是真的相关。

情况如下(摘要):在存储库模式之上,有一个工作人员执行各种任务。接下来是一个界面,显示这些不同任务的状态。 (每个任务包含大量子任务)。接口和worker都共享相同的任务存储库!

现在我想要实现的是:工作人员可以打开(或扩展,如果你愿意)一个任务,处理它的所有子任务。有时,用户可能会在界面中展开查看所有子任务的任务。当然,一旦调度程序处理了子任务,就会很高兴看到子任务更新。然而,默认情况下,我不希望在未处理或显示的情况下将子任务加载到内存中。因此,子任务应按需加载。

现在我的问题是,当其中一个消费者打开任务子任务的存储库时,最好的方式是与其他消费者共享它(这是必需的,因为存储库会在事情发生变化时引发事件)? (例如,如何使用接口共享工作者创建的存储库)。

最值得注意的是,您会说它将成为Task实体的属性,但由于Task实体使用的是业务对象,因此它不应该具有底层数据源(在本例中为EF模型)的知识,或者它上面的Repository层。

另一种选择是创建一个LoadChildTasks方法添加到Tasks存储库,但这意味着我必须在内部保留一个集合,并在调用负载时,检查是否在之前为指定的Task创建了一个SubTaskRepository 。此外,这意味着当接口和工作人员都将其操作放在任务列表上时,需要手动释放它,否则它将由内部列表保存在内存中。

1 个答案:

答案 0 :(得分:0)

我们将存储库类设为singleton类。所以它将在整个应用程序中共享。 希望这会有所帮助。 简