2010-05-10 68 views
2

我正在构建一个应用程序,该应用程序将用作客户端服务器应用程序,也可以用作断开连接的客户端应用程序。我将使用WPF(客户端 - 服务器应用程序的浏览器应用程序)。可以在Web服务层和数据访问层之间切换的服务层

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

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

编辑: 我能为查尔斯与此SO post的帮助下建议创建两个数据/ WCF Web服务的公共服务层。

回答

4

请注意,我不认为自己是这方面的专家。但我希望这些沉思有一定用处。这些基于我自己的经验。

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

定义业务层和DAL之间的单一通用接口。

创建与数据库交谈的DAL的一个实现。

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

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

对于您来说,将界面更多地转向一个实现或其他实现可能更实用。如果是这样的话,你可能不得不调整接口的较少实现。为了在保持松散耦合的较小层的实际实现的同时执行此操作,可以使用适配器模式。

其他注意事项:也许您希望您的DAL实施可以重复使用。从本质上讲,它们本身就是API。在这种情况下,您可以将它们设计为相对非特定的公共界面。现在,DAL指定其与消费者(您的应用程序)的接口,而不是反之。

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

+0

非常感谢。这使我指出了正确的方向! – 2010-05-11 17:37:55

+0

非常欢迎。 :) – 2010-05-11 23:15:53

0

该模式将工厂与策略。你可以做这样的事情 - IDatabase的所有方法定义为连接等DBWCF类连接到Widget服务,从Idatabase.dblocal继承本地数据库也继承了Idatabase。在配置文件中指定是否需要连接本地数据库或使用wcf。有一个配置类可以从配置文件读取并调用必要的工厂。工厂将安装wcfdb或dblocal类。到处都使用Idatabase。