【问题标题】:Generic DAL Architechture通用 DAL 架构
【发布时间】:2014-05-25 01:51:42
【问题描述】:

我们目前有客户端将数据存储在多个数据源(MS SQL、Oracle、MS Access、Web 服务等)中。

我们创建了一个框架来处理 MS SQL、Oracle、Access 的大多数场景,但是有些客户端不愿意提供直接的 DB 访问,因此只提供 Web 服务。

我无法想出一个通用的解决方案来处理手头的 5% 问题,以便为作为数据源的 Web 服务以及其他人创建一些东西。

谁能帮我处理这种情况。

-娜迦

【问题讨论】:

  • generic solution 是什么意思?最好的方法是提供对上层 DAL 的直接访问(通过 WCF/Web 服务),这将访问下层 DAL (DB)。
  • 感谢您的快速回复。我将尝试为您提供更多关于我正在寻找的信息。如果我有 6 个客户端,每个客户端都使用不同的方式来存储数据,即 MSSQL、Oracle、Web 服务等。我们可以编写一个通用的 DAL 层来覆盖 SqlClinet、OleDb、ODBC,但是缺点是当我们遇到网络服务。我们如何为 Web 服务创建 DAL。为 Web 服务点击 DAl 并获取要在 UI 中显示的数据。

标签: c# .net architecture data-access-layer


【解决方案1】:

将您的 Web 服务数据源视为与 MS SQL 或 Oracle 数据源没有区别。它只是一个额外的具体数据存储。遵循这样的模式:

public interface IRepository
{
 List<EmployeeModel> GetEmployees();
}

这里的 EmployeeModel 是一个简单的 C# 类,与 Oracle 或 MS SQL 或您的 Web 服务无关。

public class SqlRepository : IRepository
{
  public List<EmployeeModel> GetEmployees()
  {
   // get it from SQL using ADO.NET or Linq2Sql
   // transform into EmployeeModel using Automapper/manual and return.
  }
}

public class WebServiceRepository : IRepository
{
  private readonly ProxyClient _proxy; // or helper

  public List<EmployeeModel> GetEmployees()
  {
   // get it from the ASMX using Proxy Helpers with return type as data contracts.
   // transform the data contracts into EmployeeModel using Automapper/manual and return.
  }
}

【讨论】:

    【解决方案2】:

    我认为其中一种选择是使用存储库模式。在此查看存储库模式示例:http://www.remondo.net/repository-pattern-example-csharp/

    我希望这会有所帮助。

    【讨论】:

    • 我试过Repository,它为我解决了95%的问题,但问题是5%的数据源是一个有端点的Web服务,一般我们必须自定义代码来处理 n 个不同的 Web 服务端点,我们现在正试图提出一个解决方案来为 Web 服务端点创建一个公共 DAL 并获取数据。我可能错过了一点。您能否详细说明我如何使用 Repository for Web Service 作为数据源。
    猜你喜欢
    • 2012-06-09
    • 2011-02-10
    • 2015-02-23
    • 2013-05-31
    • 1970-01-01
    • 2013-02-06
    • 2011-02-07
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多