为什么要抽象数据访问层?

时间:2012-12-18 17:37:52

标签: c# asp.net oop c#-4.0 c#-3.0

当代码的当前范围没有任何实现细节可用时,应使用接口。

当您可以使用某些实施细节时,应使用摘要。

查询 - 为什么还需要这些条款?为什么Business对象不能直接与DataAccess.SqlServer Layer进行通信?

1 个答案:

答案 0 :(得分:6)

  

当没有任何实现细节时,应该使用接口   可用于当前的代码范围。

不是真的。你所指的是封装。有“信息专家”的概念。只有知道如何做某事的班级才应该是这样做的。接口用于多态和解耦。当消费代码想要以相同的方式处理某些类型的对象时,该代码可以通过将它们视为接口类型以相同的方式使用所有这些对象。

  

当某些实施细节出现时,应该使用摘要   可以使用

我不确定你的意思。我觉得你很困惑,因为这听起来不对。抽象类的使用方式与接口相同,只是允许它们在其中实现。

  

查询 - 为什么还需要这些条款?为什么不能Business对象   直接与DataAccess.SqlServer Layer进行通信?

它们可以,但代价是可维护性,灵活性和可测试性。如果要将数据层替换为另一个,则不能,因为消费代码直接依赖于当前数据层。如果你想对你的逻辑进行单元测试,你就不能没有命中数据库。如果将数据库类放在接口之后,可以在单元测试中模拟数据层并测试逻辑类而不需要访问数据库。

非常短的例子

public Foo FooLogic
{
    IFooData fooData = DataAccessFactory.GetDataClass<IFooData>();
    return fooData.GetFoo();
}

现在您的逻辑类与特定数据类无关。工厂可以返回一个真正的FooData实现,或者它可以返回一个模拟数据对象,或者可以放置一个新的数据访问层,而不会影响逻辑类中的代码。