【问题标题】:Service Layer which can switch between Web Service Layer and Data Access Layer可以在 Web 服务层和数据访问层之间切换的服务层
【发布时间】:2011-02-17 20:33:24
【问题描述】:

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

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

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

编辑:SO post 的帮助下,我能够按照 Charles 在下面的建议为 data/wcf Web 服务创建一个公共服务层。

【问题讨论】:

    标签: .net


    【解决方案1】:

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

    您可以通过数据访问层 (DAL) 的两个实现来做到这一点。

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

    创建一个与数据库对话的 DAL 实现。

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

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

    让您的界面更适合一种实现或另一种实现可能对您来说更实用。如果是这种情况,您可能必须使较小的实现适应接口。要做到这一点,同时保持较小层的实际实现松散耦合,您可以使用适配器模式。

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

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

    【讨论】:

    • 非常感谢。这为我指明了正确的方向!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-11-28
      • 2014-02-13
      • 2011-12-18
      • 1970-01-01
      • 2010-09-13
      • 2013-05-27
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多