【发布时间】:2014-05-16 14:35:28
【问题描述】:
我不确定这是否适合 StackOverflow,或者更适合 Programmers@StackExchange。如果这应该去那里,请在下面的评论中告诉我,我会移动它:)
无论如何 - 回到正题。我从来没有使用接口和构造函数/属性依赖注入等进行太多编程。所以我对它了解得太多了。不过,我一直在阅读一些文章,主要是 this,并发现这是一种有趣的技术,可以使我的软件更加灵活和可测试。
所以我开始重构一个现有的应用程序 (C#),我遇到了一个难题,以下 2 个选择中的一个更好:
选择 1 - 函数中的最低依赖要求.给构造函数留一些注入(使用接口时的实现决策)
public interface IDriver
{
bool Start();
bool Stop();
bool Read(uint[] signal1, uint[] signal2);
}
public class MyDriver : IDriver
{
public MyDriver(ISettings settings)
{
//remember ISettings in a local var
}
//interface implementation
}
选择 2 - 函数调用中的所有必需依赖项。
public interface IDriver
{
bool Start();
bool Stop();
bool Read(ISettings settings, uint[] signal1, uint[] signal2);
}
public class MyDriver : IDriver
{
//implementation of the interface
}
现在选择 2 可能是错误的,对吧?因为某些实现实际上可能不需要 ISettings 来工作。我的 IDriver 实现目前使用 ISettings 的事实并不意味着它会在一年左右的时间内使用,因此合乎逻辑的方法是使用方法 1。
所以我的问题是:我应该使我的接口有多严格,以及如何在接口和实现之间不混淆?我不希望实现影响我设计界面的方式。
另外,有人知道有关该主题的好文章吗?
谢谢。
【问题讨论】:
-
+1 用于回复答案,但 -1 您需要为有帮助的答案投票(有很多原因),来吧!
标签: c# interface dependency-injection