使用Web引用分隔程序集

时间:2010-03-04 01:37:02

标签: .net assemblies web-services

我很好奇其他人如何处理这种情况。我有一个包含Address对象的域层。然后我有一个使用此对象的应用程序。此外,还有一个asp.net asmx Web服务,通​​过访问第三方Web服务来执行地址验证。

我很好奇如何处理这个功能。我不想将服务引用和代码放在域层中访问Web服务。将它放在应用程序层中似乎也是错误的。

我目前最好的解决方案是创建一个引用原始域层和验证Web服务的第三个程序集。这使我的域图层更清晰,没有外部引用。你会如何处理这种情况?

1 个答案:

答案 0 :(得分:0)

那么,是在验证应用程序(UI)逻辑的地址部分还是域要求的一部分?

如果是app功能,它会进入app层。如果它是核心域函数,它将进入域层。

如果你担心耦合 - 例如,如果你认为将来可能决定使用不同的地址验证服务 - 那么就对它进行抽象。创建一个接口和一个包装类:

public interface IAddressValidator
{
    bool ValidateAddress(Address address);
}

public class FooAddressValidator : IAddressValidator
{
    private FooService service;

    public FooAddressValidator(FooService service)
    {
        this.service = service;
    }

    public bool ValidateAddress(Address address)
    {
        return service.ValidateAddress(address.StreetLine1, address.City,
            address.State, address.Country);
    }
}

或者无论逻辑是什么。然后使您的应用程序(或域模型)依赖于IAddressValidator而不是服务本身,并在最外层的扇形中加入IAddressValidator实例。

您可以将核心IAddressValidator接口放在域模型中,并将FooAddressValidator保留在只有可执行文件引用的外部程序集中。这样,您的域实际上并不依赖于Web服务,但您仍然将域验证作为域逻辑的一部分。

这也使得地址验证组件的使用更容易测试,因为您实际上不需要进行Web服务调用,您可以使用不同的MockAddressValidator实例。