簡體   English   中英

擴展方法的WCF命名約定

[英]WCF naming conventions for extending methods

我有一個方法暴露為我的WCF服務的OperationContract,我想重做。 以前的程序員寫過類似的東西:

public ReportResultObject GetReport(string stringContainingParameters)

我想有一個更像這樣的方法:

public ReportResultObject GetReport(int[] someIds, bool includeAdditionalInformation)

由於WCF不允許重載方法而不在OperationContract中指定Name屬性,並且我不想打破當前客戶端,是否存在這樣的情況的命名約定? 像GetReportV2或GetReportHeyUseMeInstead?

通過再次做同樣的事情,當你需要添加另一個參數時,你只需要為同樣的“混亂”做好准備。 我強烈建議您考慮使用單個參數作為數據合同;

public ReportResultObject GetReportTheSuperDooperWay(
    GetReportParameters parameters)

這給你帶來了什么?

[DataContract]
public class GetReportParameters
{
 [DataMember(IsRequired=false)]
 public string parameters;

 [DataMember(IsRequired=false)]
 public int[] someIds;

 [DataMember(IsRequired=false)]
 bool includeAdditionalInformation
}

因此,因為每個字段都是可選的,所以您可以在不破壞現有客戶端的情 這是一個相當簡單的示例,因為您還需要實現IExtensibleDataObject,並且您應該在服務數據協定級別通過命名空間進行版本控制。

我會選擇一些有意義的東西,讓人們更有可能認出它並適當地使用它。

public ReportResultObject GetReportWithAdditionalInformation(...)

可能有點太多了!

我當然會避免使用GetReportV2或類似的東西。

創建一個新的Operationalcontract並為其添加命名空間。 然后讓您的客戶使用新合約通過命名空間的方式調用它。 這將模擬版本控制。

如果您的WCF服務是RESTful,那么是否傳遞bool includeAdditionalInformation是否重要?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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