创建RIA服务的最佳实践
本文关键字:最佳 RIA 服务 创建 | 更新日期: 2023-09-27 18:18:48
如果你参考Silverlight开发的任何MVVM示例,你会发现每个ViewModel都有它自己的DomainContext。然而,我真的没有看到需要有ViewModel特定的DomainContext。
我倾向于为所有viewmodel创建一个共享的DomainContext。这样,当将实体添加到不同的DomainContext中并从不同的DomainContext中删除它时,就不会出现问题。否则,你可能会试图从一个根本没有特定实体的DomainContext中删除,所以异常…
谁能告诉我DomainContext的最佳实践是什么?
我的两本关于MVVM的教科书,它们是…
使用Windows®Presentation Foundation和Model View ViewModel Pattern构建企业应用程序 by Raffaele Garofalo
Pro WPF和Silverlight MVVM有效的应用开发模型-视图-视图模型 by Gary McLean Hall
…不要直接访问DomainContext。然而,两位作者都同意,在考虑数据访问层时,推荐使用"工作单元"设计模式。如果您考虑在SL应用程序中使用一个或多个DomainContext(s)作为数据访问层的一部分,您将被建议(无论如何由这些权威机构)考虑将它们封装到"工作单元"模式中。让你的ViewModel处理这些抽象。
关于最佳实践,我认为当这些模式被认真地考虑时,您已经满足了"最佳实践"。在许多情况下,实现它们可能是多余的。有一个关于"工作单元"的介绍,网址是http://msdn.microsoft.com/en-us/magazine/dd882510.aspx
有很多方法可以做到,所以我能做的最好的就是分享我所做的。
1)根据功能创建每个域上下文。例如,我将为所有User函数创建一个上下文,为所有Customer函数创建一个上下文,为Order函数创建一个上下文,等等。这允许清晰的BusinessLayer分割。
2)在Web项目中创建将返回的自定义类,而不是由向导创建的抽象视图。我个人有一个问题,在IQueryAble返回到Silverlight项目中指定我的DB视图的名称,因为Silverlight项目可以被认为是UI层。它间接地强制依赖于DataLayer,这是我们不想要的。是的,它通过添加额外的类创造了更多的工作,但它有助于为适当的三层体系结构强制抽象。
3)在UI层上创建自定义类,以消化从映射方法(来自DataContext)返回的数据。这有助于强制抽象。
请记住,最终目标是使您的代码尽可能松耦合。这总是需要额外的(有时是多余的)编码,但最终的结果是值得的。
你也可以考虑创建一个RIA类库;它允许你进一步抽象。这并不是最简单的实现,但是在尝试促进Silverlight和Web项目之间的通信时,它是朝着正确方向迈出的一步。