[英]C# refactoring considerations
我有以下疑問。
為了進行重構,我讀過一種很好的創建方法,它具有非常特定的責任,因此,如果可能的話,將一個復雜的方法拆分為其他小的方法是一個好主意。
但是想象一下我有這種情況:
我必須創建一個對象列表,並插入這個對象,我必須創建另一個對象。 像這樣:
public void myComplexMethod(List<MyTypeA> paramObjectsA)
{
foreach(MyTypeA iteratorA in paramObjectsA)
{
//Create myObjectB of type B
//Create myObjectC of type C
myObjectB.MyPorpertyTpyeC = myObjectC;
}
}
我可以將此方法分為兩種方法。
public void myMethodCreateB(List<MyTypeA> paramObjectsA)
{
foreach(MyTypeA iteratorA in paramObjectsA)
{
//Create myObjectB of type B
}
}
public void myMethodCreateB(List<MyTypeB> paramObjectsB)
{
foreach(MyTypeB iteratorB in paramObjectsB)
{
//Create myObjectC of type C
iteratorB.PropertyC = myObjectC;
}
}
在第二個選項中,當我使用兩個方法代替一個方法時,單元測試不太復雜,但是問題是我使用了兩個foreach循環,因此,效率不如第一個選項中的僅使用一個循環。
那么,至少在一般情況下,使用一種更復雜的方法以提高效率或使用更多種方法的最佳實踐是什么?
非常感謝。
除非另有說明,否則我通常將可讀性放在優先於性能之上的位置。 我現在進行一些概括,但是根據我的經驗,當人們在代碼級別上過於關注性能時,結果是可維護性降低了代碼,使他們無法創建功能正確的代碼,花費的時間更長(=花費更多),並且可能會導致性能更低的代碼。
因此,不必擔心,並使用更具可讀性的方法。 如果您的應用程序最終確實太慢,請通過分析器運行它,並查明(並證明)需要優化的一兩個地方。 我可以保證你不會是這段代碼。
盡早在架構級別做出正確的選擇更為重要,因為一旦構建了應用程序,您將無法輕松地在該級別進行更改。
通常,在這種情況下,我會繼續使用一個for循環。 似乎您只是在創建和裝飾MyTypeB的對象。 我希望在類MyTypeB中創建一個工廠方法:
static MyTypeB Create(MyTypeA a) { // if the creation of MyTypeB depends on A
//Create myObjectB of type B
//Create myObjectC of type C
myObjectB.MyPorpertyTpyeC = myObjectC;
return myObjectB;
}
那么您的復雜方法將變為:
public void myComplexMethod(List<MyTypeA> paramObjectsA)
{
foreach(MyTypeA iteratorA in paramObjectsA)
{
MyTypeB myObjectB = MyTypeB.Create(iteratorA);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.