【问题标题】:MVC 3 Repository Pattern via SOAP通过 SOAP 的 MVC 3 存储库模式
【发布时间】:2011-11-21 18:41:49
【问题描述】:

感谢任何帮助。

我们目前正在改造一个遗留项目,该项目现在正走向一个难以维护的噩梦。因此,我们决定正确规范化数据结构并在使用存储库模式的 MVC 3 项目中使用 Entity Framework 4 Code First 开发。我们目前面临的问题是,出于安全原因,遗留应用程序托管在我们主要基础设施之外的服务器上 - 因此所有 CRUD 操作都是通过 Web 服务完成的,没有直接连接到 MS SQL 数据库的字符串。

我的“建议”解决方案是定义我的存储库合同,在开发过程中将直接连接到数据库,但一旦部署就不会连接(以后可能会有更改的余地)。那么,对我来说,提供两个适用于同一个合同的具体版本的存储库是否合理。一个使用 LINQ 执行 CRUD 操作(开发和可能的基础设施,我们可以稍后移动到)和另一个使用 SOAP 传递对象的版本(这意味着我的 POCO 需要定义为可序列化)并以这种方式执行 CRUD 操作?

这听起来可行还是有更好的方法来实现?

谢谢!

【问题讨论】:

  • 只是为了澄清一些混淆,我已经读回了我自己的内容 - 具有直接连接字符串的存储库版本将由存储库的“其他”版本(SOAP 版本)使用。 SOAP 版本基本上只是对 LINQ 存储库进行服务调用的存根。
  • 你也在开发服务吗?
  • 是的,我们将负责开发整个事情。

标签: c# asp.net-mvc-3 soap entity-framework-4 repository


【解决方案1】:

如果您负责开发客户端和服务部分,您可以使用一些简单的方法:

  • 为存储库和服务客户​​端使用一些共享接口
  • 在客户端注入服务客户端中使用远程存储库时 - 服务将直接使用存储库实现
  • 直接在客户端注入存储库中使用本地存储库时

通过使用这种方法,您将拥有两个场景的单一存储库实现,并且您的上层逻辑不会改变。远程存储库将只有额外的 Web 服务层。您的存储库必须封装所有数据访问逻辑和查询 = 在存储库之外没有 linq 查询,这不是您的体系结构中的问题,因为如果没有您自己的自定义开发或不使用 WCF 数据服务,linq 查询是不可序列化的(但它会有对您的架构的其他影响)。

顺便说一句。将存储库放在 Web 服务后面并不常见。更常见的是将整个服务层/业务逻辑放在 Web 服务之后。

【讨论】:

  • 我确实打算使用 Ninject 作为 DI,因为我希望 SOAP 存储库非常松散耦合 - 这可以在某个时候完全删除(因此通过合同设计与两种类型的存储库),但短期内我们需要通过 SOAP 保持通信。存储库“域端”将通过 LINQ 执行所有 CRUD 操作并返回序列化的 POCO 或集合对象,存储库“外部端”将只是一个调用“域端”存储库方法的存根。我们希望一旦取消了断开该层的需要,我们就可以直接 DI 存储库。
猜你喜欢
  • 2012-09-05
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多