我正在为系统设计一个新组件,试图遵循DI上的各种指导原则,以便在隔离,模拟等方面获得回报。
所以我有以下组件(图示为抽象):
我想将它们包含在'Performer'中(因为缺少更好的名称)组件,它将执行以下操作:
IDataSet Performer.Perform(IFetcher fetcher, IBuilder builder)
{
IDataSource ds = fetcher.Fetch();
return builder.BuildDataSet(ds);
}
为了遵守依赖注入和LoD指南(无论如何我都理解它们),我同时传递了IFetcher和IBuilder组件。
我的问题 - 这听起来像是可接受的设计吗?与工作同事的对话是“是的,听起来不错”,但并不是100%相信Performer课程的封装。
我看到它的方式,Performer是一个复合控件,它将几个不同的组件粘合在一起,这应该是可以接受的。唯一的问号是我是否应该有一个'Performer Factory',但这似乎有点过分,因为实际的组件(IFetcher和IBuilder)可以被模拟。
任何想法都会受到赞赏,谢谢。
答案 0 :(得分: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框架会为你构建它。