可以在Web服务层和数据访问层之间切换的服务层

时间:2010-05-10 19:51:58

标签: .net

我正在构建一个应用程序,它将充当客户端 - 服务器应用程序,也可以作为断开连接的客户端应用程序。我将使用WPF(浏览器应用程序用于客户端 - 服务器应用程序)。

在与服务器的数据库交互时,我需要使用WCF Web服务进行连接。连接本地化数据库时,我需要使用本地db的数据访问层进行连接。

这种架构有哪些方法/模式?

修改 我能够为这两个数据/ wcf网络服务创建一个公共服务层,正如Charles在SO post的帮助下所建议的那样。

2 个答案:

答案 0 :(得分:4)

请注意,在任何情况下,我都不认为自己是这方面的专家。但我希望这些思考有一些用处。这些都是基于我自己的经验。

您可以通过实现数据访问层(DAL)的两种实现来实现此目的。

在业务层和DAL之间定义一个通用接口。

创建一个与数据库通信的DAL实现。

创建一个与Web服务对话的DAL实现。

这两个都将实现您的通用接口,以便业务层(BL)无需知道当前正在使用哪个DAL。显然,处理应用程序和其中一个DAL之间的连接需要一些特殊的逻辑。这可能存在于DAL和BL之间的特殊层中,或者存在于交叉层(例如通信层)中。

将接口更多地用于一个实现或另一个实现可能更实用。如果是这种情况,您可能必须使较小的实现适应接口。要在保持较小层的实际实现松散耦合的同时执行此操作,您将使用适配器模式。

进一步的考虑:也许您希望DAL实现可以重复使用。从本质上讲,它们本身就是API。在这种情况下,您将它们设计为相对非特定的公共接口。现在,DAL规定了它与消费者(您的应用程序)的接口,而不是反之亦然。

除此之外,它是直接的分层和抽象。这是一本关于应用程序架构的可下载Microsoft出版物(我刚刚开始阅读):http://msdn.microsoft.com/en-us/library/ff650706.aspx

答案 1 :(得分:0)

模式将是出厂策略。你可以这样做 - 具有为connect等定义的所有方法的IDatabase。用于连接到从Idatabase.dblocal继承以访问本地db的WCF服务的DBWCF类也从Idatabase继承。在配置文件中,指定是否需要连接本地数据库或wcf。有一个配置类,它将从配置文件中读取并调用必要的工厂。工厂将实例化wcfdb或dblocal类。并且到处都使用Idatabase。