【发布时间】:2013-06-15 15:47:08
【问题描述】:
来自Liskov Substitution Principle - www.blackwasp.co.uk
不符合 LSP 的一个常见迹象是客户端类检查其依赖项的类型。这可能是通过读取对象的属性来人为地描述其类型或通过使用反射来获取类型。根据依赖的类型,通常会使用 switch 语句来执行不同的操作。这种额外的复杂性也违反了开放/封闭原则 (OCP),因为在引入更多子类时需要修改客户端类。
以下技术(使用反射)是否会导致违反 LSP?
- 依赖注入
- 控制反转
注意:我来自 C# 背景。
来自http://blogs.msdn.com/b/simonince/archive/2008/06/30/dependency-injection-is-dead.aspx
反射;大多数(也许全部?)依赖注入容器在某种程度上依赖于反射——动态检查对象并确定它们的依赖关系。
参考:
How can I avoid breaking Liskov Substitution Principle (LSP)?
Does Liskov Substitution Principle also apply to classes implementing an interface?
Does this violate the Liskov substitution principle, and if so, what do I do about it?
Does GWT's ActivityMapper violate the Liskov Substitution Principle?
【问题讨论】:
-
“不遵守 LSP 的一个常见迹象是......反射” - 这并不意味着反射的所有使用都违反LSP。
标签: oop design-patterns solid-principles ooad