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