簡體   English   中英

WCF設計:避免接口重復

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM