2

我正在为系统设计一个新组件,尝试遵循有关 DI 的各种准则,以便我们在隔离、模拟等方面获得回报。

所以我有以下组件(说明为抽象):

  • Fetcher - 支持 IFetcher,它从特定数据源获取数据。返回 IDataSource。
  • Builder - 支持 IBuilder,它从 IDataSource 构建结构。

我想将它们包装在一个“Performer”(因为想要一个更好的名字)组件中,它会执行以下操作:

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

为了遵守 Dependency Injection 和 LoD 指南(据我所知),我同时传入了 IFetcher 和 IBuilder 组件。

我的问题 - 这听起来像一个可以接受的设计吗?与工作同事的对话是“是的,听起来不错”,但不是 100% 相信 Performer 类的封装。

在我看来,Performer 是一个复合控件,它将几个不同的组件粘合在一起,这应该是可以接受的。唯一的问号是我是否应该有一个“Performer Factory”,但考虑到可以模拟实际组件(Ifetcher 和 IBuilder),这似乎有点过分了。

任何想法将不胜感激,谢谢。

4

1 回答 1

1

从 DI 的角度来看,我唯一要改变的是在执行器构造函数中获取 fetcher 和 builder。IE

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 框架就会为您构建它。

于 2008-12-04T12:08:27.727 回答