2010-06-30 48 views
1

因此,用於創建結構化XML的結構是通過某種類的結構定義的。是否有一個很好的包裝語言的設計模式,以便只有定義的操作纔會發生?相互依賴的語言包裝器的設計模式

每個項都包含自己的XElement)

  • MSBuildDoc(DOC的發電機)
  • MSBuildTarget(目標)
  • MSBuildMessageTask
  • MsBuildCallTask​​
  • MsBuildBuildTask
  • MSBuildTaskOutputElement

我想構建一個框架,使孤兒是不可能的,只有有效的組合工作,有效的組合可以從一個項目的實例步行。

相互依賴的事實是,使用Add(common interface or superclass)AddAfterSelf(common interface or superclass)等方法需要已經創建子/同級。如果構造函數是公共的,那麼你可以直接創建一個孤兒。

例子:

var msb=new MSBuildDoc(); 
var mainTarget=new MSBuildtarget(); //created as orphan 
msb.Add(mainTarget); // add is free to accept anything even invalid child types 

使用創建方法(靜態或不)會直接創建孤兒。

使用AddSubType方法需要子類型的實現細節(構建它需要什麼)來生活在父類中。

例子:

var x=new MSBuildDoc(); 
var mainTarget=x.AddTarget("Main") //AddTarget method is defined in the parent class 
    .SetAttributeFluent("BuildInParallel","true"); 
mainTarget.AddBuildTask(alltargets); 

我認識到,做一個詳盡的包裝幾乎是毫無意義和荒謬的。我正在嘗試包裝我在項目中使用的極少數部分,以便核心類非常易讀並且非常易於維護。

回答

0

你可以簡單地要求每個類型的構造函數需要一個參數,即父節點:當你想避免孤立對象

var msb = new MSBuildDoc(); 
var mainTarget = new MSBuildtarget(msb); // constructor calls msb.Add(m_XElem) 

這種模式並不少見。或者,您可以使用成熟的builder pattern,並進行類型構建並返回其潛在的孩子。