摘要:依赖倒置原则(Dependency Inversion Principle、DIP)是一个错误的尝试,Robert C. Martin希望将针对接口编程和控制反转两个概念纳入其DIP中,却形成了一个思路混乱的、不知所云的原则。(作为正文,不能够喜怒笑骂。草稿 抛弃依赖倒置原则 将被修改为吐槽版。)
1.2.4 抛弃依赖倒置原则(DIP)
Robert C. Martin(Bob大叔)被誉为世界级软件开发大师,是设计模式和敏捷开发先驱,敏捷联盟首任主席。著有《代码整洁之道》、《敏捷软件开发:原则、模式和实践》和《UML:Java程序员指南》等著作。他于1996在一个专栏上发表了的文章中提出依赖倒置原则(Dependency Inversion Principle、DIP) 并在几年后收入到他的著作《敏捷软件开发》中。
1. 基本态度
本节之所以明确提出抛弃DIP,源于下列原因:①DIP本身就是错误的。该论文有资格成为计算机科学史上著名的反例,国内外存在大量的基于DIP的文章、许多介绍DIP的书籍,国内几乎所有都关于设计模式的书籍都正面地介绍它。如此不知所云的原则为什么会在计算机界存在这么久?②它对学习者带来了困扰,依赖倒置原则(Dependency Inversion Principle、DIP)、控制反转/IoC 和依赖注入/DI 搅合在一起,成为“那些年搞不懂的高深术语”。③对于读者而言,他的错误有借鉴意义。通过指出DIP文章的错误,读者可以对针对接口编程、控制反转和Parnas原则有更清晰的认识;对于学者而言,他的错误有警示意义。有些学者追求制造一些高大上的东西,喜欢制造一些吸引眼球的新概念,以晦涩为荣。OOD不应讲哲学、神学和玄学;学习和研究OO时,应该知道的是日常生活的常识。④指出DIP文章的错误,与其说鼓励读者拥有批判精神,不如说希望程序员拥有工匠精神,踏踏实实领会编程中原则和技术,而非胡言乱语地制造概念。
很多人将DIP作为针对接口编程/抽象依赖原则的晦涩版本。在DIP大量存在于业界的情况下,这是一种妥协的方式:在不认可DIP的每一个字的前提下,可以将它解释为依赖于抽象类型。
2. DIP论文的错误
本节不可能按照其论文,逐字逐句地指出其错误,请有兴趣的读者自己找到其原始文章(网上没有原文的链接,只有转载的文章),该文奇葩到了错误无处不在的地步。本质上,Robert C. Martin希望将针对接口编程和控制反转两个概念纳入其DIP这一个原则中,最后形成了一个思路混乱的、不知所云的原则。
依赖倒置原则(DIP)1. High level modules should not depend upon low level modules, both should depend upon abstractions. 高层模块不应该依赖低层模块。两个都应该依赖抽象。- <