2015-12-21 46 views
2

我們有這花了很多不同的參數我應該創建一個新的類只是作爲方法的PARAM使用

void MethodA(ClassA a, ClassB b, ClassC c ....) 

一類我想創建一個新的類

public class InputClass 
    { 
     public ClassA A { get; set; } 
     public ClassB B { get; set; } 
     public ClassC C { get; set; } 
     ......... 
    } 

,這樣我可以改變methodA到

void MethodA(InputClass input) 

我認爲它使方法看起來更乾淨,但你認爲我應該這樣做,因爲InputClass不會介紹任何有意義的對象。

+0

要那樣做節目爲別人?......你在你自己的問題有了答案......你希望它是這樣的,使它看起來更清潔...那爲什麼還要關心'我的想法?'?....不是一個理想的問題! –

+0

這個問題可能更適合[代碼評論](http://codereview.stackexchange.com/)。 – DGibbs

+0

@DGibbs這對於Code Review來說並不是一個理想的問題......這個提問者已經有了答案,任何區別都完全取決於回答者的意見! –

回答

0

您可以實現一個結構:

struct ClassesContainer 
{ 
    public ClassA A { get; set; } 
    public ClassB B { get; set; } 
    public ClassC C { get; set; } 
    ......... 
} 

然後:

void MethodA(ClassesContainer input) 
+0

另一種選擇,但有什麼優勢? – TaW

+0

@TaW它是一個短實例,僅使用兩個前向參數。 – Eli

0

當的方法參數列表的增長變得更難對其進行跟蹤,並維持在一般的方法。當你有一堆自然而然地聚集在一起的參數時,或者你必須依次調用具有相同參數集的幾個方法時,通常是將它們提取到單獨的稱爲參數對象的類中的一個很好的決定。正如你正確的提到的那樣,目標方法看起來更清晰

因爲InputClass不存在任何有意義的對象

InputClass含義是要用於參數值的容器,這足以證明它的存在。

馬丁福勒和其他聰明人甚至有一個模式,稱爲Parameter Object

0

它取決於參數的性質以及參數在特定連接中的使用頻率。

例如int x, int y, int z自然可以放在Point結構中。你是否應該這樣做,取決於你使用這種結構的頻率。

在另一方面,string nameOfMyCatstring colorOfJanesShirtint ageOfTomsDog有那麼一點共同之處,他們should't放在一個抽象的InputClass

我對這類問題的個人原則是:如果我找到了InputClass,既是一個(主要是;-))實字的描述性的名稱,然後我組的相關參數:

  • int x, y, zPoint
  • int r, g, b, aColor
  • int width, heightSizeExtent或任何
  • string firstName, middleName, secondNameName
  • Point position, int velocity, int accelerationMotion
相關問題