2012-01-13 24 views
3

我正在努力改進我的類和對象的工作策略。編程策略 - 如何將對象傳遞到類的鏈中

通過一系列特定的類傳遞一個對象以保持代碼組織的最佳方式是什麼?

示例:使用ZedGraph對象(注意)這可能不是最好的例子,但它會得到的想法。

class Graphhandler 
{ 
    private ZedGraphControl ZGC; 
    private SubGraphController PortionofGraph; 

    public class GraphHandler(ZedGraphControl _ZGC) 
    { 
     ZGC = _ZGC; 
     initializeGraph(); 
    } 

    private void initializeGraph() 
    { 
     // notice I am putting the ZGC Object into another class 
     // and likely that ZGC object will go into another class 
     PortionofGraph = new SubGraphController(ZGC); 
    }   
}  

class SubGraphController 
{ 
    private ZedGraphControl ZGC; 
    private DeeperSubGraphController PortionofGraph; 

    public class SubGraphController(ZedGraphControl _ZGC) 
    { 
     ZGC = _ZGC; 
     initializeSubGraph(); 
    } 

    private void initializeSubGraph() 
    { 
     PortionofGraph = new DeeperSubGraphController(ZGC); 
     // is there a better way? 
    } 

} 

有沒有更好的方式通過所有這些調用來傳遞一個yop級別的對象來操縱數據?

回答

3

通常情況下,答案是將完全形成的依賴關係傳遞給對象。例如:

public GraphHandler(SubGraphController portionOfGraph) { 
    this.portionOfGraph = portionOfGraph; 
} 

public SubGraphController(DeeperSubGraphController portionOfGraph) { 
    this.portionOfGraph = portionOfGraph; 
} 


... 

var zedGraphControl = new ZedGraphControl(); 
var deeperSubGraphController = new DeeperSubGraphController(zedGraphControl); 
var subGraphController = new SubGraphController(deeperSubGraphController); 
var graphHandler = new GraphHandler(subGraphController); 

而不是直接在您的子圖控制器中構建DeeperSubGraphController。如今,您通常使用依賴注入框架來編排所有這些內容。

(參見:Dependency Injection Myth: Reference Passing

+0

是的,我同意這一點,但是我所採取的方法會更好地將工作簡化爲子部分。假設你有2個可能的圖形結果,需要大量的圖表子部分的代碼工作,那麼你是否希望將ZGC向下傳遞給代碼? – Ashitakalax 2012-01-13 23:51:47

+0

@ user970011,你能舉個例子嗎? – 2012-01-14 00:06:36

+0

假設你有一個Graph對象,並且已經給出了你的數據。您可以使圖形成爲折線圖或條形圖。每個圖都有大量的代碼以您想要的方式自定義圖形。所以你創建類來處理折線圖和條形圖工作。爲了仍然使用這些對象,您仍然需要訪問該主圖對象。 – Ashitakalax 2012-01-14 00:14:21

0

你可以嘗試在這種情況下使用繼承。

+0

糾正我,如果我錯了,我很可能已經得手,但不認爲工作只是去更高水平的課程?我主要想知道更低? – Ashitakalax 2012-01-13 23:27:37

+0

這更像是使用繼承來解決問題的逆向方法。 – 2012-01-13 23:39:30

1

你可以看看Inversion Of Control(通常是簡化的IoC)。
它基本上是一個超級對象,允許您隨時隨地訪問其他對象。

0

不同控制器如何控制圖形。一般來說,對象會按照您所做的方式傳遞 - 作爲方法參數。如果一個對象在不同的​​方法中需要/使用另一個對象(因爲控制器控制你的案例中的圖形),那麼它們就像你所做的那樣被聲明爲該引用對象的成員。如果它們對於單個方法是必需的,則它們作爲參數傳遞給對象的特定方法。

如果有更復雜的方式控制圖形按特定的順序,您可能需要查看chain of responsibility模式。

相關問題