OOP 过度杀伤
你好呀,
多年来,我一直被一个无法解决的难题所困扰。有段时间,我不得不搜索一些框架和内容管理系统 (CMS),所以我研究了大多数主流的 PHP 框架,也研究了一些 C++ 框架(当然,这并不意味着它们之间有关联)。我还浏览了各种用不同语言编写的开源项目,只是想看看它们是由什么构成的。
我发现一种趋势,我称之为“OOP Overkill”;也就是说,程序员倾向于在源代码中随意添加大量的类,无处不在,理由千奇百怪。他们还倾向于创建复杂的层级结构,包括基类、派生类等等,很多时候毫无理由。我记得我第一次看到这种情况是在 MFC(微软基础类库)中,对于每个可能使用的窗口,它都会自动创建一个类。在 Web 框架中,这意味着应用程序需要交付的每个网页至少需要一个类。例如,OpenCart 为每个网页使用了 3 个类:一个用于模型层,一个用于控制器,一个用于视图。而且,这些类还存在于大量处理核心功能的系统类之上。
甚至有些语言,比如 Java 和 C#,都强制你遵循这个设计原则,把整个应用程序变成一个大类(好吧,其实没那么大,但仍然不是只有一个 main() 函数,而是将应用程序封装在一个类中,你对此无能为力)。
即使语言本身没有强制这样做,也有很多程序员渴望从第一行代码创建一个应用程序类,然后快速实例化一个对象,将逻辑分散到其他几十个文件中,放在成员函数(方法)中,如果你需要做某事或了解一切是如何运作的,你就必须追踪这些成员函数(方法)。
就我个人而言,我并不认为 OOP 只是一种“看,所有东西都应该这样实现,看起来也应该这样”。在我看来,它更像是“看,这是一个强大的工具;用它来赋予抽象的概念生命,将数据和操作封装在一个对象中,无论何时你需要,只要这样做有意义就行”。因此,与任何其他工具一样,使用它与否完全取决于你。
在我大约15年开发各种程序(桌面、Web应用程序等)的经验中,我从未觉得有必要采用这种方法。我也从未觉得有必要使用类继承、抽象类、接口或类似的东西。我接手过一些相当复杂的项目,但即使在像PHP这样的语言中,数组这种功能强大且用途广泛的语言,数据处理也可以在简单的层面上完成,无需复杂的封装。
但是,也许我忽略了一些东西。所以我的问题是:选择这种设计,把所有东西(包括应用程序本身)都封装到一个又一个的类中,客观上有什么好处?是不是有什么我不知道的安全原因?
非常感谢!
干杯 :)