【问题标题】:.NET Remoting to WCF - Structuring solution to avoid circular dependency.NET Remoting to WCF - 构建解决方案以避免循环依赖
【发布时间】:2011-07-04 20:28:27
【问题描述】:

我正在尝试将使用 .NET Remoting 的现有项目转换为使用 WCF。项目结构如下:

  • 用户界面
  • 业务层

BusinessLayer 项目是一个类库,其中包含具有方法IResult Process(IJobProcessor) 的客户端激活对象DistributedProcessorIJobProcessorIResult 接口和具体类都在 BusinessLayer 库中。 IJobProcessor 的具体类反过来又使用了 BusinessLayer 中的很多很多类。

对于 .NET Remoting,这种情况是理想的。分布式部分只是一个包含 BusinessLayer 并侦听特定端口的 Windows 服务。客户端使用Activator.GetObject()创建远程对象。

为了将其转换为 WCF,我意识到如果按如下方式构建项目,则会出现循环依赖问题:

  • 用户界面
  • BusinessLayer - 引用 WcfService
  • WcfService - 引用 BusinessLayer

该服务需要对 BusinessLayer 的引用,以便我可以通过网络传输对象。 BusinessLayer 需要对 WcfService 的引用,以便它可以调用 WcfService 上的IResult Process(IJobProcessor) 方法。

能否将接口IResultIJobProcessor 移出到单独的项目BusinessLayerDistributed 中,例如:

  • 用户界面
  • BusinessLayer - 引用 BusinessLayerDistributed
  • BusinessLayerDistributed
  • WcfService - 引用 BusinessLayer、BusinessLayerDistributed

我的问题是:如果所有这些接口的具体类仍在 BusinessLayer 中,那么 IResultIJobProcessor 对象在转移到服务时是否会作为它们的具体类适当地水合?使用 WCF 执行此操作有什么技巧吗?

【问题讨论】:

  • 对于一些项目,我使用这种方法取得了巨大的成功。

标签: wcf projects-and-solutions circular-dependency


【解决方案1】:

为什么业务层必须调用服务层中的任何东西?业务层不应该有任何关于服务外观层的知识,正常的服务也是从客户端调用的——从不从业务层调用,因为这在服务架构中没有意义。

唯一的例外是双工(双向)通信,但即使使用这种架构,您仍然不会在程序集中使用循环依赖。有一些模式可以避免这种情况——例如,业务层可以有事件,而服务层可以订阅它们。订阅将在参考业务层的服务服务层中完成。如果你不喜欢事件,你可以使用 Observer GoF 模式。

另一个从业务逻辑调用服务层的有效场景是完全面向服务的架构,但在这种情况下,每个“服务”都有自己的服务组件和业务逻辑组件,您将在它们之间进行交叉调用。

【讨论】:

  • 我不太明白。就我而言,必须创建这些 IJobProcessor 对象。具体创建的内容是业务逻辑的一部分。
  • 如果您在服务层中有方法需要参数,则该参数是通过客户端请求的反序列化创建的。所有其他业务层类要么在服务操作本身中实例化,要么在服务层引导程序中实例化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 2020-09-15
  • 1970-01-01
相关资源
最近更新 更多