2008-12-04 95 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