SOLID原则的现代思考

作为一名在伦敦工作的建筑顾问,几乎每次面试都会被问及SOLID原则。通常,面试持续一个小时,会给出一个教科书式的答案,否则面试可能会持续数小时。保留自己的意见,这样会更快乐。

原则的起源

首先,让引用OCP(开闭原则)的起源。这是由Eiffel语言的创造者Bertrand Meyer首次提出的,然后在2000年由Robert C. Martin(Bob大叔)在其著作《Principles and Patterns》中提出。引用Martin的论文:

"一个模块应该对扩展开放,对修改封闭。" "在面向对象设计的所有原则中,这是最重要的。... 这意味着应该编写模块,使它们可以被扩展,而不需要修改它们。换句话说,希望能够改变模块的功能,而不需要修改模块的源代码。"

什么是模块?

一个模块可以是一个类,一组类,或者是一个组件,如库,它构成了一个特性。在下面的讨论中,将假设所有这些情况。

无处不在的虚拟

一旦发布一个类,不应该改变它!应该考虑它可能被扩展的所有可能性,准备方法作为虚拟函数工作得很好,放弃“从最简单的事情开始”的敏捷原则,立即考虑完整的架构!将失去修改它的最后机会,最好现在就行动,甚至在检查之前,这是不归路的点,关闭到开放的时刻,最后机会,mwahh ha ha haaaa!

为什么要写单元测试?

如果每次想要留下现有的实现,遵循OCP,不改变它并扩展模块,那么实际上不需要编写未来证明的代码,因为代码不会改变,每次将扩展现有代码,作为软件变化的规范,将继续扩展,将达到数百个继承类链。也许可以写更少的单元测试,因为这个模块的逻辑不会改变!

“优先组合而不是继承”怎么了?

这是否与OCP相矛盾?现在,每次想要改变,会用另一个类包装现有类(装饰者GoF设计模式),然后原始实现将被数十个类覆盖,无法触及。

认真地,让放弃它

也许这个原则在瀑布时代起作用,或者它可能,使用了“可能”这个词,适用于第三方组件或框架,但它不适用于日常的业务开发。

习惯于传播这个术语,不再称之为原则,而没有给予太多思考。下次面试官问关于SOLID原则时,会问他/她,意思是SLID吗?

在发布前审查了这篇文章,语气看起来很生气,但事实是,笑着享受它。希望能分享快乐。

现代软件开发中的SOLID原则

在现代软件开发中,SOLID原则仍然是一个重要的讨论话题。然而,随着敏捷开发和测试驱动开发(TDD)的兴起,这些原则的应用和解释已经发生了变化。让更深入地探讨这些原则,并考虑它们在当前软件开发实践中的相关性。

单一职责原则指出,一个类应该只有一个引起它变化的原因。这意味着类应该专注于一个功能或职责。在敏捷开发中,这个原则有助于保持代码的可维护性和可测试性。然而,随着微服务架构的兴起,单一职责原则的应用已经扩展到服务级别,每个服务负责一个特定的业务功能。

开闭原则是本文讨论的焦点。它建议软件实体应该对扩展开放,对修改封闭。这意味着在不修改现有代码的情况下,应该能够通过添加新代码来扩展功能。在现代软件开发中,这个原则与持续集成和持续部署(CI/CD)实践相结合,以确保软件能够适应不断变化的需求。

里氏替换原则指出,子类对象应该能够替换其父类对象被使用。这个原则强调了继承的安全性和多态性的重要性。在现代软件开发中,这个原则有助于确保代码的可扩展性和可维护性,特别是在使用面向对象编程语言时。

接口隔离原则建议不应该强迫任何客户端依赖于它不使用的方法。这个原则鼓励设计轻量级的接口,只包含客户端需要的方法。在现代软件开发中,这个原则与微服务架构和模块化设计相结合,以提高系统的灵活性和可维护性。

依赖倒置原则建议高层模块不应该依赖于低层模块,两者都应该依赖于抽象。此外,抽象不应该依赖于细节,细节应该依赖于抽象。这个原则有助于减少模块之间的耦合,提高系统的可维护性和可扩展性。在现代软件开发中,这个原则与依赖注入(DI)和面向接口编程相结合,以实现更灵活和可测试的代码。

SOLID原则与敏捷开发

敏捷开发强调快速迭代和对变化的适应。SOLID原则可以帮助团队创建可维护和可扩展的代码,这与敏捷开发的目标是一致的。然而,敏捷开发也鼓励团队在必要时重构代码,这可能与开闭原则的某些方面相冲突。在这种情况下,团队需要在遵循SOLID原则和适应快速变化的需求之间找到平衡。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485