我需要一些指导。我有一个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服务的最终客户端。
有解决方法吗?
答案 0 :(得分:2)
它非常直接 - 在合同中定义IFooable,而不是在域中。
这里的逻辑是,任何暴露给客户的东西(根据定义)是合同或合同的一部分,而不是域实体。