【问题标题】:Why and when to use an Interface with Linq [closed]为什么以及何时使用 Linq 接口 [关闭]
【发布时间】:2012-12-24 03:19:16
【问题描述】:

假设您有三层(BusinessDataUI)。我的数据层将有一个 linq to sql 文件,其中添加了所有表。

我见过一些示例,其中在业务层中创建接口,然后在另一个类中实现(类型为 IQueryable/IEnumerable),但其他类使用普通的 Linq syntax 获取/保存/删除/更新数据

为什么以及何时使用具有IQueryable/IEnumerable 类型的接口?

【问题讨论】:

    标签: linq interface data-access-layer


    【解决方案1】:

    您可能希望这样做的两种最常见的情况是:

    1. 您希望保护自己免受系统该部分的更改。
    2. 您希望能够编写出色的单元测试。

    例如,您有一个直接与 LINQ to SQL 对话的业务层。将来您可能需要使用 nHibernate 或实体框架。进行此更改会影响您的业务层,这可能不好。

    相反,如果您已经对接口进行了编程(例如 IDataRepository),您应该能够在无需更改业务层的情况下换入和换出具体的实现,例如 LINQtoSQLRepository 或 HibernateRepository - 它只关心它可以调用,比如 Add ()、Update()、Get()、Delete() 等 - 但并不关心这些操作实际上是如何完成的。

    接口编程对于单元测试也非常有用。由于速度和可靠性等各种原因,您不想对数据库服务器运行测试。因此,您可以传入测试替身、伪造或模拟实现来测试您的数据层。例如。您有一些实现 IDataRepository 的测试数据,它允许您在没有数据库连接的情况下从业务层测试 add()、delete() 等。

    这些要点通常是应用程序各个方面的良好做法。我建议阅读存储库模式、SOLID 原则,甚至可能是测试驱动开发。这是一个很大且有时很复杂的领域,很难准确地给出具体的答案,说明该做什么以及何时需要适合您的场景。

    我希望这可以帮助您入门。

    【讨论】:

    • 谢谢。有没有我可以参考的文章/示例,主要显示应该如何创建 IDataRepository 的“错误”和“正确”方式?
    • 最好谷歌存储库模式。这是非常常见的技术,你会得到大量的文章。正如我所说 - 接口编程不是一门精确的科学 - 太多了,您可能会不必要地使您的应用程序复杂化。
    猜你喜欢
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 2017-10-23
    • 1970-01-01
    • 2011-01-21
    • 2018-11-12
    相关资源
    最近更新 更多