Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单一责任原则是否与等级直接相关;依赖关系?_C#_Single Responsibility Principle - Fatal编程技术网

C# 单一责任原则是否与等级直接相关;依赖关系?

C# 单一责任原则是否与等级直接相关;依赖关系?,c#,single-responsibility-principle,C#,Single Responsibility Principle,如果一个类通过接口依赖于一个以上的其他类,那么这是违反SRP的行为,还是只有当两个接口都预期会改变时才违反SRP的行为,或者这是完全错误的想法?原则上,SRP与该类可能具有的依赖性以及依赖性的数量完全正交 一个类可以有一个单一的职责,但如果该职责执行起来很复杂,那么它可能会依赖于负责琐碎工作的“分包商”。本质上,你的单一责任是“协调这些人,使X发生”。不一定。一个类仍然可以有一个职责,但有多个依赖项。拥有多个依赖项通常是一个类正在做很多事情的标志,但这并不能证明这一点。如果该类只是在这些依赖接口

如果一个类通过接口依赖于一个以上的其他类,那么这是违反SRP的行为,还是只有当两个接口都预期会改变时才违反SRP的行为,或者这是完全错误的想法?

原则上,SRP与该类可能具有的依赖性以及依赖性的数量完全正交


一个类可以有一个单一的职责,但如果该职责执行起来很复杂,那么它可能会依赖于负责琐碎工作的“分包商”。本质上,你的单一责任是“协调这些人,使X发生”。

不一定。一个类仍然可以有一个职责,但有多个依赖项。拥有多个依赖项通常是一个类正在做很多事情的标志,但这并不能证明这一点。

如果该类只是在这些依赖接口上调用方法,那就不会违反SRP,因为它正在协调一个在不同组件上调用不同方法的过程,这就是责任所在


如果没有特定的上下文,很难给出准确的答案,但简而言之:具有多个接口的依赖关系本身并不违反SRP。

谢谢,这很有意义。如果我认为这个原则意味着一个类应该只有一个改变的理由,这难道不意味着依赖性吗?@Ford:不,“理由”的意思是“你可能想要改变这个类的行为的方式”。依赖关系是(或应该是)接口类型,因此将
IDependency
的一个实现替换为另一个并不是改变的理由;事实上,它甚至可能不会导致一行代码的更改。