[英]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.