【问题标题】:Generic Data Access Layer通用数据访问层
【发布时间】:2014-10-01 16:46:51
【问题描述】:

我想构建一个针对任何多个数据库(即 SQL Server、Oracle、DB2 等)的通用数据访问层,棘手的部分是我还需要支持 Web 服务,因此我的数据源也可以是 Web 服务。每个数据源都有相似的数据,但列名不同,Web 服务中的返回类型也不同。

我如何创建一个通用数据访问层来定位任何数据源并将通用对象/列表返回到 .NET、C# 中的 UI。

.NET 4.5、C#、Web API、VS 2013 是我正在使用的。

请提出建议。非常感谢任何帮助。

干杯

【问题讨论】:

  • 这个数据访问层会做什么?
  • 据我了解您的问题,此 DAL 将(通用)数据返回到业务对象并最终返回到 UI。
  • 我不确定如何将这个数据访问层声明为除了接口之外的任何东西。你有非常不同的底层实现,而且你似乎不需要任何特定的逻辑,那么还剩下什么?
  • 好吧,我想我已经把你弄糊涂了,所以让我在这里澄清一下。例如,如果我有 3 个不同的数据源,即 SQL Server、Oracle 和 Web 服务。 SQL Server/Oracle 有一个表 Employee 表,但列名不同,Web 服务以自己的特定格式返回数据,即具有不同的属性。现在,我希望创建的 DAL 应该接受 SQL/Oracle 的自定义查询,并在 Web 服务的情况下调用特定的端点,并在通用类 EmployeeData/IList 中获取数据,我将在我的 UI 中声明和使用它。
  • 我明白了,但问题是什么?您不能编写一个类来同时提供来自 SQL Server 和 Oracle 的数据以及 Web 服务,这样就规定了不同的底层类,这就是为什么在我看来,您剩下的就是如何声明该接口。那么这里的问题是什么?

标签: c# .net database asp.net-web-api architecture


【解决方案1】:

在我看来,你把事情弄得太复杂了。只需为您拥有的每种数据源类型创建数据访问组件,并让它们返回您定义的业务或域实体。充分利用每个数据源的力量,而不是试图让它们“通用”。

另外,为什么将 Web 服务视为数据源?它是一个 Web 服务,已经抽象出来了。只需在您的应用程序层中使用它并使用它的实体。

底线:如果太难做,那就不要做,保持简单。

另请阅读http://ayende.com/blog/4567/the-false-myth-of-encapsulating-data-access-in-the-dal

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    相关资源
    最近更新 更多