2011-07-12 23 views
3

我想知道是否最好將整個類的實例傳遞給另一個類或只是該類的特定屬性。例如,如果我想在類B中的類A的height屬性,我只傳遞高度值到類B或類的整個實例,並在類B中使用classA.height?傳遞整個類的實例還是隻是具體的值更好?

我之間的靈活性和傳遞整個類或封裝和通過特定的屬性之間撕裂。

感謝

克里斯

+0

您能否爲您提到的兩種方法添加示例源代碼? – mrk

+0

在你的例子中,我將綁定高度值 –

回答

7

你在邏輯傳遞?你是否邏輯地傳遞了關於整個人的信息,而且恰巧此刻你只對高度感興趣?或者是在B 的操作自然是顯然只對高度感興趣?

無論什麼最合乎邏輯,即使它意味着有更多的信息可用比你目前使用的。

1

傳遞一個類(或{},即普通老式對象),而不是通過單獨的值的優點是:

  • 只有一個參數被傳遞(節省寄存器/堆棧空間),
  • 如果將類作爲arg的方法需要在將來某個時候讀取其他屬性,則不必更改方法簽名或重構調用代碼,只需要終點(即類或其他某種方法的內部特徵使用類)。

我發現第二個原因是你開始實施更多的事件調度或消息傳遞時最強。在事件創建A處,收集事件A中的數據和填充數據,派發事件A,B具有事件A的事件監聽器,拾取事件A的數據,可能會分配數據,然後還需要派發N多個事件C,D和E以及A的一些數據,可能會追加新的數據。

現在說你想從事件A的調度點傳遞一個新的'foo'參數,事件C將被事件C,D和E拾取。如果你填入事件A的數據是一個類(或者甚至是隻是一個{},即基礎對象),那麼你不需要調整事件A或事件C或任何其他監聽器。

當談到調度事件時,處理事件被捕獲的一點是,在創建對象和使用和傳遞對象之間可能存在長距離的距離。一個對象(或一組屬性)從其實例化源傳遞(從方法調用到方法調用到填充到調度事件中的數據)越多,您必須注意數據傳遞的方式越多。通過保持簡單,即傳遞一個類實例,您只需專注於正確創建對象並正確使用對象。

1

它取決於你的方法的功能以及你想如何使用它。如果在你的例子中,你所關心的所有方法都是高度,然後通過高度。儘可能具體,以便您的方法的功能是明確的。請記住,就像良好的變量名一樣,敏感的數據類型也能提供良好的文檔和可讀性。

相關問題