避免将太多程序集暴露给客户端使用WCF服务

时间:2011-09-21 18:54:11

标签: c# wcf web-services assemblies business-logic

我需要一些指导。我有一个WCF服务,它是更大的解决方案的一部分。目前,由于继承问题,最终消费者必须引用太多程序集。例如,这是我的基本项目设置:

MyProject.Domain

namespace MyProject.Domain
{
    public interface IFooable{}

    public class Foo : IFooable{}
}

MyProject.Contracts

namespace MyProject.Contracts
{
    [DataContract]
    public class FooData : IFooable{}

    [ServiceContract]
    public class IFooService
    {
        IEnumerable<FooData> GetFoos();
    }
}

MyProject.Proxies

namespace MyProject.Proxies
{
    public class WCFClient{}
}

问题在于:

class ConsumerCode
{
    private WCFClient = new WCFClient();

    void consumeService()
    {
        // Compiler error. No reference to MyProject.Domain.IFooable
        var foos = WCFClient.GetFoos();
    }

这意味着使用 FooData 对象的最终消费者还必须包含对 MyProject.Domain 的引用,因为我不必暴露业务逻辑层到WCF服务的最终客户端。

有解决方法吗?

1 个答案:

答案 0 :(得分:2)

它非常直接 - 在合同中定义IFooable,而不是在域中。

这里的逻辑是,任何暴露给客户的东西(根据定义)是合同或合同的一部分,而不是域实体。