2015-09-30 107 views
0

這個問題是關於適當的和可接受的編碼實踐給出以下情況。在API中創建超載方法的正確方法C#

我有以下2種方法。

public TService GetDuplexClientChannel<T>(BindingType bindingType, EndpointAddress endPointAddress) where T : TService 
{ 
     .. Do work .. then .. 
     return InstanceOf(TService); 
} 

public TService GetDuplexClientChannel<T>(BindingType bindingType, string endPointAddress) where T : TService 
{ 
// Call the above method and just return it. 
return GetDuplexClientChannel<T>(bindingType, new EndpointAddress(endPointAddress); 

}

在第一例中,有方法A,做的工作,和方法B這簡單地是A的過載,但電話有做的工作。

我想知道這是一種可以接受的模式,還是應該在第二種方法中重複該代碼?這是最佳做法。

我已經看過這個鏈接,但它並沒有回答我的問題,什麼是正確的還是不正確的: Better way to overload methods in C#

+0

DRY是一種編程原則,意思是「不要重複自己」。它是重用代碼的好實踐(正如你所做的那樣),而不是重複它,並且在維護和難以追蹤的錯誤方面加倍努力(在方法A中工作,但不在B中)。 –

回答

0

是的,這絕對是因爲你的情況可以接受的模式,你的通用說法看似無關到端點地址的類型。

它在各種庫和框架被看作如在.NET Framework(Console.Write)或下述Dapper源:

public static Task<IEnumerable<object>> QueryAsync(this IDbConnection cnn, 
    Type type, CommandDefinition command) 
{ 
    return QueryAsync<object>(cnn, type, command); 
} 
0

是。這是在同一個類中重載方法的完全真實的方法。不要在第二種方法中重複代碼。

0

我想知道這是一種可接受的模式,或者應該在第二種方法中重複使用 代碼嗎? 這是最佳做法。

這種模式可以在許多實現中看到,因此可以接受。

爲了使您的代碼更易於維護,您不應該使用其他方法重複該代碼。

封裝是類似案例的最佳實踐。

+0

另一方面:許多實現中看到的代碼並不一定會使其可接受 –

+0

不是問題中提到的模式,但是您正確@CallumBradbury :) – kolunar

+0

是的,這裏的模式是正確的方式 –