刚刚在“你使用什么 JS lib”投票中看到了这条评论
“@Xanti - 是的,是的,编程中的模块化和抽象是一种糟糕的做法。调用其他函数的函数?浪费。”
这让我很好奇,因为我使用的是用于 PHP 的 Kohana 框架和用于 javascript 的 Jquery 库。
为什么有些人认为抽象和模块化是不好的做法?框架和库不是用来简化和加速开发的吗?
这是投票的链接
刚刚在“你使用什么 JS lib”投票中看到了这条评论
“@Xanti - 是的,是的,编程中的模块化和抽象是一种糟糕的做法。调用其他函数的函数?浪费。”
这让我很好奇,因为我使用的是用于 PHP 的 Kohana 框架和用于 javascript 的 Jquery 库。
为什么有些人认为抽象和模块化是不好的做法?框架和库不是用来简化和加速开发的吗?
这是投票的链接
我发现过多的抽象可能会危害您的工作效率:
选择不当的抽象可能比没有抽象更糟糕。
如果你需要阅读四五个不同的模块来理解一个简单的算法是如何工作的,那么抽象障碍可能不在正确的地方。也许有一种重构代码的好方法,或者只是消除障碍会更容易。
如果抽象不对应一个相对熟悉的想法,新的团队成员可能很难学习。
抽象不是“无意识的善”;它的存在是为了服务于特定目的。其中最常见的目的是
保护数据结构的不变量
封装可能改变的设计决策
我最大的抽象障碍经验是使用我们的 C 研究编译器(2008 年的存档快照,网址为https://www.cs.tufts.edu/~nr/c--/)。比学生在编译器课上看到的要多得多的抽象:
这些抽象中的每一个都为我们的研究提供了重要的目的,但总体效果是新生很难学习编译器。因此,即使最初的评论是开玩笑的,也有抽象可能导致问题的地方。
在处理有限的资源时,它很容易增加开销。
当然有些东西编译器会优化掉,但是如果你在四个整洁的 .c 文件中创建四个整洁的对象,将它们编译成四个整洁的 .so 文件,然后用哑链接器链接它们,可以轻松内联的跨模块函数调用仍然使用完整状态转储制作,可以完全优化掉的部分仍然执行,等等。
我向您保证,如果您开始使用面向对象语言的最佳实践、使用高级设计模式并创建多个抽象层来编写具有 4K RAM 和 16K 闪存的 8 位 PIC 微控制器,您的程序将永远无法运行。“过早的优化是万恶之源”,一位从未为具有 128 字节 RAM 的平台编程的人说。
一般来说,抽象和模块化是好的和必不可少的。那里可能有不好的抽象,例如:不再支持或昂贵或只是不可用的框架,或大,或过时,或第二选择,等等。图书馆“市场”总体上是巨大的。您发现自己使用哪种类型的库取决于环境和个人喜好。
为什么有些人认为抽象和模块化是不好的做法?框架和库不是用来简化和加速开发的吗?
改变和学习有时是困难的——所以人们要与之抗争。如果你喜欢研究这种类型,你可以从以下网址开始你的研究:http ://thedailywtf.com/ :-) 我会忽略它们并使用库和框架,因为它们为你服务并让你的程序员生活得更好。
我们可能可以假设评论者不是认真的。
我无法想象有人声称模块化和抽象是不好的做法并且实际上是有意义的。
当开发人员能够或被要求与抽象或模块化交互并且无法理解其目的或设计时,他们会声称抽象或模块化是一种不好的做法。
当每个函数(和辅助函数)都在自己的模块中时?
前段时间很安静,但是 fortran 编译器的手册建议选择标识符作为相同长度的字符串和随机选择的字母。
解释?好吧,它允许在内部编译器哈希表中均匀分布名称,因此提供了更快的编译速度。
我认为您引用的文字就在此建议旁边
好的抽象在您的软件中的 2 个或更多位置被引用。
例子:
在 2 个或更多地方引用的抽象通过分解常见的东西有助于减少代码大小,这是一件好事。
但是,如果您有很多只引用一次的抽象,那么很有可能不需要抽象。
出现不必要的抽象时的一些示例:
一些非常好的抽象示例:
因此,要务实地回答您的问题:抽象是不好的,当它们被少于 2 个地方引用时。
关于模块化,它是主观的:你可以随心所欲地组织你的代码。如果你的库的源代码在一个单一的源文件中,它不会比你把它分解成数百个文件更糟。
在评估抽象的好坏时,请始终考虑全局:整个项目、整个产品线等。