【问题标题】:Exposing existing business objects in WCF在 WCF 中公开现有业务对象
【发布时间】:2009-06-03 03:40:32
【问题描述】:

我知道关于这个主题有类似的问题,但我不完全确定他们是否解决了同样的问题。所以要明确一点...

我有一个现有的类库,其中包含用于类型、业务逻辑和数据访问的命名空间。逻辑和数据访问命名空间中的类是静态的,并且具有基本的 crud 方法来用数据填充类型实例或获取已经满的类型实例并在数据库中进行插入或更新。

现在,除了直接引用这个库的现有应用程序之外,我还想创建一个 WCF 服务,以便其他应用程序可以通过这种方式使用对象和方法。

我看到的每个 WCF 教程都会在服务项目中创建域对象 - 但我不希望在两个地方定义我的对象。

所以我想我可以在现有的类库中引用序列化并将类型类标记为 [DataContract] 并将属性标记为 [DataMember]。然后,在 WCF 项目中,使用 [OperationContract] 方法创建 [ServiceContract] 接口,以匹配我想要公开的现有库中的静态逻辑类和方法。然后,从 WCF 项目中,引用现有的类库并通过其中的方法来实现 WCF 接口,这些方法调用返回现有库类型的现有库逻辑方法。

这是一个好的模式吗?

【问题讨论】:

    标签: wcf


    【解决方案1】:

    听起来不错,但改造序列化往往比最初看起来更麻烦。我建议您将一些轻量级数据合约构建到服务层中,然后在服务层和业务层之间构建一个小层,以将数据合约转换为业务对象,反之亦然。

    【讨论】:

      【解决方案2】:

      假设您的业务对象可以序列化(具有 Serializable 属性),一种方法可能是创建 DataContainer 对象,这将是您的数据契约。该对象将在您的 CRUD 方法中使用。

      例如,您的界面可能是 更新(数据容器对象) 插入(数据容器 obj)

      等等

      然后您将使用二进制序列化将您的对象打包成字节数组,并以这种方式通过 WCF 传递。另一方面,您将再次使用 BinarySerialization 反序列化它们。您只需要确保双方(客户端和服务器)都具有您的业务对象类型的有效程序集版本。

      【讨论】:

      • 谢谢马克斯。实际上我没有提到它,但我想做的一件事就是不将库发送给服务的消费者。
      猜你喜欢
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多