我刚从演示者类重构了一个新的域类,但我无法弄清楚在哪里实例化它。
这是一项较大规模的持续重构工作的一部分,其中遗留项目维护不善。
Presenter当前正由视图的OnLoad事件创建,视图作为构造函数中的参数传递。演示者中的所有公共方法都是无参数的,并返回void。它们使用视图的公共属性与视图进行通信。
视图本质上是一种不起眼的形式完全取决于演示者的所有内容。
这是典型的被动视图模式,我想继续坚持它。这让我陷入困境。我需要为演示者创建一个新域对象的实例。
我目前没有使用任何依赖注入框架。虽然我对将来使用它感兴趣但源代码仍然非常脆弱,无法引入第三方框架。
我愿意接受任何建议。
答案 0 :(得分:2)
我已经完成了!!! 在my repository查看此处。我在这里的选择是使用构造函数......满足最贪婪的我确信演示者是Up。在您的情况下,您可以从视图特定的impl提供依赖项。
玩得开心:)
答案 1 :(得分:1)
我找到了一个更简单的解决方案。这是我原来课程的一个例子:
public Presenter(IView view)
{
this.View = view;
}
我想将新的依赖项作为构造函数参数传递,但也不想将此依赖项添加到我的视图中。建设者链接救援!
public Presenter(IView view):this(view, new Dependency()){}
public Presenter(IView view, IDependency dependency)
{
this.View = view;
this.Dependency = dependency;
}
现在,生产代码继续使用原始界面,而单元测试使用传递模拟的新视图和依赖项。如果依赖关系的数量继续增长,则需要进行一些重构,但在不久的将来,这是一个理想的解决方案。
答案 2 :(得分:0)
我现在要去仓库或工厂。它会立即测试。将来,您可以将其实现替换为DI库。
public class DomainObjectsRepository
{
/// <summary>
/// can not be instantiated, use <see cref="Instance"/> instead.
/// </summary>
protected DomainObjectsRepository()
{
}
static DomainObjectsRepository()
{
Instance = new DomainObjectsRepository();
}
public static DomainObjectsRepository Instance { get; set; }
public virtual ICustomerDao GetCustomerDao()
{
return new CustomerDao();
}
}
public class DomainObjectsRepositoryMock : DomainObjectsRepository
{
public override ICustomerDao GetCustomerDao()
{
return new CustomerDaoMock();
}
}