创建RIA服务DomainContext的最佳实践

时间:2011-12-24 14:23:05

标签: c# silverlight c#-4.0 silverlight-4.0

如果你引用开发的Silverlight的任何MVVM样本,你会发现每个ViewModel都有它自己的DomainContext。但是,我并不认为需要具有ViewModel特定的DomainContext。

我倾向于为所有ViewModel创建一个共享的DomainContext。这样,当将实体添加到不同的DomainContext并从不同的DomainContext中删除它的问题永远不会出现。否则,您可能会尝试从根本没有该特定实体的DomainContext中删除,因此异常..

有人能告诉我DomainContext的最佳做法是什么吗?

2 个答案:

答案 0 :(得分:1)

有很多方法可以实现,所以我能做的最好的就是分享我的工作。

1)根据功能创建每个域上下文。例如,我将为所有用户功能创建一个上下文,一个用于所有客户功能,一个用于订单功能等。这样可以实现干净的BusinessLayer细分。

2)在Web项目中创建将返回的自定义类,而不是向导创建的抽象视图。我个人遇到的问题是,IQueryAble中指定的我的数据库视图的名称返回到Silverlight项目,因为Silverlight项目可以被视为UI层。它间接强制对DataLayer的依赖,这是我们不想要的。是的,它通过添加其他类创建了更多工作,但它有助于对适当的3层体系结构实施抽象。

3)在UI层上创建自定义类,用于从映射方法(来自DataContext)中消化返回的数据。这有助于强制抽象。

请记住,最终目标是让您的代码尽可能松散耦合。这总是需要额外的(有时是冗余的)编码,但最终结果值得付出努力。

您还可以考虑创建RIA类库;这允许你进一步抽象。这不是最简单的实现,但在尝试促进Silverlight和Web项目之间的通信时,它是朝着正确方向迈出的一步。

答案 1 :(得分:1)

我在MVVM上的两本教科书是......

使用Windows®PresentationFoundation构建企业应用程序和模型视图ViewModel模式作者:Raffaele Garofalo

使用Model-View-ViewModel进行WPF和Silverlight MVVM有效应用程序开发作者:Gary McLean Hall

...不直接解决DomainContext问题。但是,两位作者都同意,在涉及数据访问层的地方,建议采用“工作单元”设计模式。如果您考虑在SL应用程序中使用一个或多个DomainContext作为数据访问层的一部分,则建议(无论如何这些权限)考虑将它们封装到“工作单元”模式中。让ViewModel处理这些抽象。

至于最佳实践,我认为当这些模式被认真地 时,您已经满足了'最佳实践'。在许多情况下实施它们可能有点过分。

http://msdn.microsoft.com/en-us/magazine/dd882510.aspx

介绍了“工作单位”