silverlight - WCF RIA 是否强制执行不良设计?

标签 silverlight wcf-ria-services

在过去的几周里,我一直在使用 Silverlight 涉足 WCF RIA,我发现使用它来生成设计良好的软件非常困难。我的印象是,它是最适合用于“快速应用程序开发”、原型(prototype)设计和外观精美的演示的工具。

例如,为了充分利用 RIA,我发现您几乎必须从头到尾依赖您的数据模型。 WCF RIA 听起来最好的功能(如端到端验证和 EF 集成)要求您几乎按原样呈现您的 Entity Framework 数据模型,一直到您的表示层。这排除了使用 Service Layer 设计软件的可能性。模式、数据映射器或 DTO。我还发现自己在努力创建一个具有真正 Domain Model 的应用程序(到目前为止无济于事)。由于 EF 的限制。

代码生成的东西很好,我可以看到它节省了我的时间,除了它不支持多对多关系这样的基本场景。这导致我不得不通过公开中间外键表通过 EF 公开更多我的数据库实现细节。

除了这些问题之外,众所周知,WCF RIA 几乎不可能进行测试。 DomainContext 类没有隐藏在接口(interface)后面,由于更改跟踪和其他细微差别,这样做非常困难。在我在野外看到的每一个案例中,ViewModel 最终都直接依赖于 DomainContext 实现。即使这个依赖是构造函数注入(inject)的,它也是没有意义的,因为它不能被合理地模拟。

所以我想我的问题有两个:WCF RIA 是否强制执行糟糕的设计?如果是这样,是否有任何合理的解决方法不会让我失去平台的大部分优势?如果没有,有人可以向我指出一些文献,这些文献展示了如何使用 WCF RIA 基于久经考验的模式生成好的设计?

最佳答案

您可以将问题重新表述为“我可以吃蛋糕吗?”。

我已经编码了大约 30 多年,多次看到这个周期:-

  • 第三代语言太灵活了,我们重复自己做同样的事情。我们需要的是第 4 代语言或框架来消除所有这些重复。
  • 第四代语言或框架过于严格,它迫使我在我的特定项目中找到丑陋的解决方法并“强制执行糟糕的设计”。我们需要的是一种更灵活的低级语言,它可以让我们做我们想做的事。
  • 另一个第三代语言太灵活了....循环重复。

  • RIA、Lightswitch、WebMatrix等工具属于第四代阵营。他们通过设计强制执行某些任务的特定方式,以消除重复并允许开发人员快速完成工作。开发人员用理想的设计换取开发速度。这种权衡与旧计算本身一样。

    所以要回答你的问题,不,你不能吃蛋糕。你要么做事他们的方式和使用 RIA WCF 服务或者你做事 您的 方式并创建自己的
    WCF 服务。有一些中间地带(一如既往),您可以使用一些 RIA WCF,然后跳过箍让它做您想做的事情。

    顺便说一句,EF 确实在它最终呈现的模型和您的实际数据库模式之间提供了相当大的抽象(尽管付出了很多努力)。例如,它确实允许您在没有中间类的情况下呈现多对多关系。

    关于silverlight - WCF RIA 是否强制执行不良设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5074129/

    相关文章:

    silverlight - EF5 Code First 和 RIA 服务 Silverlight "Object reference not set to an instance of an object"错误构建客户端

    silverlight - 用于 silverlight 的内存分析器

    silverlight - 删除 Silverlight 中的变音符号(String.Normalize 问题)

    c# - 自定义 MediaStreamSource 和 MediaElement.Naturalduration 属性

    vb.net - 来自 UIElement 的 Cast(Of ?)

    c# - Safari Mac OSX 退格问题

    silverlight - RIA 服务域服务类 web.config 设置

    c# - 如何获取服务器端字段的字符串长度?

    silverlight-4.0 - 如何为 View 模型实现 IEditableObject?

    wcf - WCF RIA 服务可以自托管吗?