WCF设计:避免接口重复
本文关键字:接口 设计 WCF | 更新日期: 2023-09-27 18:00:15
我发现自己被吸引在这个场景中使用两个相同的接口,这似乎是不对的。然而,另一种选择似乎是在我的服务中使用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服务需要公开一个新服务,那么您也不必更改存储库接口。