当没有任何实现细节可用于代码的当前范围时,应使用接口。为什么要抽象数据访问层?
当您可以使用一些实现细节时,应该使用摘要。
查询 - 为什么仍然需要这些条款?为什么Business对象不能直接与DataAccess.SqlServer Layer进行通信?
当没有任何实现细节可用于代码的当前范围时,应使用接口。为什么要抽象数据访问层?
当您可以使用一些实现细节时,应该使用摘要。
查询 - 为什么仍然需要这些条款?为什么Business对象不能直接与DataAccess.SqlServer Layer进行通信?
当没有任何实现细节是 可用于代码的当前范围时,应使用接口。
不是。你所指的是封装。有“信息专家”的概念。只有知道如何做某事的班级应该是这样做的班级。接口用于多态和解耦。当消费代码想要以同样的方式处理某些类型的对象时,该代码可以以相同的方式将所有这些对象用作接口类型。
当一些执行细节 提供给您
我不知道你的意思在这里文摘应该被使用。我觉得你很困惑,因为这听起来不对。抽象类的使用方式与接口相同,只是它们允许在其中实现。
查询 - 为什么仍然需要这些条款?为什么业务对象 不能与DataAccess.SqlServer层直接通信?
它们可以但是以可维护性,灵活性和可测试性为代价。如果要将数据层替换为另一个数据层,则不能这样做,因为消费代码对当前数据层有直接依赖关系。如果你想单元测试你的逻辑,你不能没有击中数据库。如果您将数据库类放在接口后面,则可以在单元测试中模拟数据层,并测试您的逻辑类而不碰到数据库。
非常简短的例子
public Foo FooLogic
{
IFooData fooData = DataAccessFactory.GetDataClass<IFooData>();
return fooData.GetFoo();
}
现在你的逻辑类不依赖于特定的数据类。工厂可以返回一个真正的FooData实现,或者它可以返回一个模拟数据对象,或者可以放置一个新的数据访问层,而不会影响逻辑类中的代码。
更好的分层,更好的抽象,更松散的耦合 - 需要我继续吗? – duffymo
对不起老兄...这太开放了...你可能会把这个问题关闭,因为这个问题太开放了......但对于duffymo而言,松耦合是一个主要原因......如果你问这个问题,我怀疑你从来没有经历过大型项目重构的困境。 – Rikon
我认为你的问题会更适合http://programmers.stackexchange.com/ – Fabio