[英]WCF Design: Avoiding Interface Duplication
我发现自己很想在这种情况下使用两个相同的接口,但这似乎不太正确。 但是,替代方法似乎是在我的服务中使用WCF装饰的界面,这也感觉不对。
示例如下
这是我的WCF服务的界面
[ServiceContract(Namespace="http://MyNameSpace")]
public interface IGetDataService
{
[OperationContract]
List<MyDataObject> GetData();
}
现在,可以说该服务仅从数据库获取数据。 我需要一个实现方式来促进这种检索。 此类是否也应实现IGetDataService,因为方法相同? 还是应该有另一个接口,例如IDataRepository:
public interface IDataRepository
{
List<MyDataObject> GetData();
}
请注意,就签名而言,此接口与IGetDataService相同。 唯一的区别是缺少WCF相关属性。
class DatabaseDataRepository: IDataRepository
{
public List<MyDataObject> GetData()
{
// code to query database here
// return populated List<MyDataObject>
}
}
至于WCF服务本身的实现(为了完整性):
class DataService: IGetDataService
{
public List<MyDataObject> GetData()
{
var repository = MyIocContainer.GetInstance<IDataRepository>();
return repository.GetData();
}
}
因此,总结一下:我需要IDataRepository还是IGetDataService在内部可重用?
我非常有信心两者都能奏效-对设计最佳实践感兴趣。
这实际上是一个偏好问题。
我将使用两个不同的接口。 这会增加一些开销,但它允许两个合同在不同方向上灵活调整。
例如,如果您的WCF服务需要公开一项新服务,那么您也不必更改存储库界面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.