2008-12-04 45 views
2

我設計一個新的組件到系統,試圖跟隨DI上的各種指引,讓我們得到回報在隔離方面,嘲諷等DI和複合組件 - 設計

所以我有以下組成部分(示爲一個抽象):

  • 擷取 - 支持IFetcher,其 來自特定數據源 取出數據。返回IDataSource。
  • Builder - 支持IBuilder,其中 從IDataSource構建一個結構。

我想在「表演」(一個更好的名稱想)組件來包裝這些了,這將做到以下幾點:

IDataSet Performer.Perform(IFetcher fetcher, IBuilder builder) 
{ 
    IDataSource ds = fetcher.Fetch(); 
    return builder.BuildDataSet(ds); 
} 

爲了遵守依賴注入和毀滅之王準則(據我瞭解他們),我通過IFetcher和IBuilder組件。

我的問題 - 這聽起來像一個可接受的設計?與同事的對話符合「是的,聽起來不錯」,但並不完全相信Performer類的封裝。

我看到它的方式,Performer是一個複合控件,它將幾個不同的組件粘合在一起,這應該是可以接受的。唯一的問題是我是否應該有一個'Performer Factory',但考慮到實際組件(IFetcher和IBuilder)可以被嘲弄,這看起來有些過分。

任何想法,將不勝感激,謝謝。

回答

1

從DI的角度來看,我唯一會改變的是獲取執行者構造函數中的fetcher和builder。即

public class Performer { 

    private IFetcher fetcher; 
    private IBuilder builder;   

    public Performer(IFetcher fetcher, IBuilder builder) { 
     this.fetcher = fetcher; 
     this.builder = builder; 
    } 

    public IDataSet Perform(DataSource ds){ 
     IDataSource ds = fetcher.Fetch(); 
     return builder.BuildDataSet(ds); 
    } 
} 

並使用DI框架。不,我不認爲你需要工廠方法。只要你需要一個IPerformer,DI框架就會爲你構建它。

+0

謝謝你。我的設計由於其他原因而略有變化,但其更廣泛的方面仍然存在。 – Duncan 2008-12-04 16:05:28