silverlight - 具有 RIA 服务的 Entity Framework ,Silverlight - 解耦与快速开发的权衡

标签 silverlight entity-framework tdd wcf-ria-services

我最近一直在研究 Entity Framework 、WCF RIA 服务和 Silverlight 4。使用这些工具开发应用程序的速度之快给我留下了深刻的印象,而且您“免费”获得了很多东西,例如Silverlight UI 自动了解作为 DataAnnotations 包含在 EF 模型中的某些验证。但是,在大型应用程序中,似乎不希望在整个应用程序(包括业务逻辑和 UI)中一直依赖 EF。

我知道您可以将 POCO/IPOCO 与 Entity Framework 一起使用,这对我来说当然是一个选择。然而,如果你走那条路,你会失去一些“自动”的东西,比如 Silverlight 无需任何额外工作就能显示模型验证。

人们如何处理这个问题?为了将其他层与 EF 解耦,您是否会放弃一些功能并在不同层之间放置接口(interface)?还是为了更快速的开发而放弃解耦?有什么方法可以让我的蛋糕也能吃到我没见过的东西吗?

最佳答案

我的小组目前正在处理这个确切的问题。我们想出了一个大家都满意的妥协方案。请记住,在一切都结束之前,项目会随着时间的推移变得更加复杂,而可维护性是关键。您还希望尽可能地提高代码重用率,以便尽可能减少更换 UI(或单元测试)的工作量。

考虑到所有这些,我们倾向于使用定义明确的域层,而不是将 EF 一直推到 UI。这使模型成为应用程序的核心,而不是强制我们遵守数据库的模式。我知道 EF 试图通过其概念模型将其抽象化,但我们不断遇到小陷阱,这使得依赖 EF 获得完整堆栈变得越来越困难。例如,确实没有适合将业务逻辑与 EF 放在一起的好地方。我们不想把那些东西放到拦截器中,我们也不想把它放在 UI 中。当然,可能有一个聪明的解决方法,但我们不喜欢我们被插入的方向。

妥协是使用 EF,但将其保留在数据存储和领域模型之间。这样我们仍然不必针对 DataReader 进行编程,并且我们可以利用域中 self 跟踪实体的优势。然后,我们将域中的基本 WCF 服务(非 RESTful)公开给我们的 UI。

对我们来说,额外的验证工作并不是什么大不了的事。当然,我们的初始版本需要多一点时间,但整个维护周期不会那么长,因为我们没有在框架的复杂性上摆弄。

关于silverlight - 具有 RIA 服务的 Entity Framework ,Silverlight - 解耦与快速开发的权衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2864853/

相关文章:

c# - 在 silverlight 和 HTML5 之间切换

silverlight - 如何注册以接收 Mvvm-Light 中的所有属性更改

c# - Entity Framework 错误 : The field "ForeignKey" is required EF

entity-framework - Entity Framework 核心 : How to solve Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths

ios - 从 UnitTest 启动 ViewDidAppear

ruby-on-rails-3 - Ruby 教程 Ch9 练习 #9 - 不允许管理员删除自己

c# - Windows Phone 的 pivot TitleTemplate 中的数据绑定(bind)

silverlight - 将 Hunspell 与 Silverlight 结合使用

c# - Entity Framework 中的双重自引用

java - 使用假服务器进行集成测试