刚开始工作,有人提到这个概念,我仍然不明白。我最初认为这意味着视图应该使用IN BETWEEN类的业务逻辑类。因此,即使后面的代码失败,类之间也会始终返回默认值。
他们告诉我这是错误的并且说它更多地与使用HTMLAGILITYPACK这样的语句有关。你应该如何做到这一点,以便业务逻辑不依赖于像HTMLAGILITYPACK那样对程序至关重要的东西?这是否意味着我应该导入可以搜索html并编写"的另一个.dll;以防htmlagilitypack以某种方式失败"请改用.dll吗?
我不明白。谢谢!
(程序目的)该程序进入一个网站并使用htmlagilitypack下载一些元素,然后使用从网站获得的信息填写类。
答案 0 :(得分:1)
你的理解是错误的。网络上有数十个教程,只有通过在StackOverFlow上询问才能理解它。你应该阅读软件设计模式和架构书籍。在这里,我提到了依赖性倒置原则的最重要方面,但我鼓励您阅读以下链接并了解。
1-高级模块不应该依赖于低级模块
2-抽象不应该依赖于细节,细节应该依赖 抽象。
进一步阅读和实现技术只需阅读这些教程。它们很好,几乎适合初学者。
Dependency Inversion Principle(随C#示例提供)
Inversion of Control – An Introduction with Examples in .NET
第二个环节当然涵盖了更全面的概念。
答案 1 :(得分:1)
Dependency Inversion允许您编写不依赖于 外部 依赖关系的代码。
对于你的问题"这是否意味着我应该导入可以搜索html" 错误的另一个.dll,如果使用正确的依赖应该允许你引入另一个DLL而不做任何更改你的业务逻辑代码。
请考虑以下方法:
以下代码依赖于HTML Agility Pack。 HtmlWeb,web.Load和web.load返回的都是依赖项。
public string GetDocumentInfo(string path)
{
var web = new HtmlWeb();
var doc = web.Load(path);
// ... etc ... etc
}
现在考虑修改:
以下代码仅取决于IDocumentReader 接口(您可以定义的接口)。
public string GetDocumentInfo(string path, IDocumentReader reader)
{
return reader.Read(path);
}
您希望这样做的原因是,以后您可以创建另一个实现IDocumentReader的类,该类读取XML,或读取.CSV文件等等。现在您的代码只需要一个实现IDocumentReader接口的类,并不关心在实现它的类中使用的框架。