有一天,我偶然发现了Linus Torwalds的一篇相当古老的网站帖子。这是臭名昭着的“你充满了公牛****”的帖子,当他捍卫他选择使用普通C代替Git而不是更现代的东西时。
特别是this post让我想到了大量的抽象层,这些层在我工作的地方积累了一个。我是一个Windows .Net环境。我必须说我喜欢C#和.Net环境,它确实让大多数事情变得简单。
现在,我来自一个非常不同的背景,它由Unix技术组成,如C和过多的脚本语言;对我而言,OOP只是一个,并不总是最好的编程范例。我经常与同事(特别是一个人)一起努力(当然是一种工作方式!),因为它们似乎是“任何问题都可以通过额外的抽象层次来解决”教会,而我更像是“保持简单”的学校。我认为对于可能来自不同文化的问题有一种非常不同的心理方法。
作为一个非常简单的例子,对于我在这里做的第一个项目,我需要一些应用程序的配置。我创建了一个10行类来加载和解析txt文件,该文件位于程序的根目录中,包含冒号分隔的键/值对,每行一个。它奏效了。
最后,为了标准化配置问题的方法,我们现在有一个库,它位于运行每个配置程序的每台机器上,该程序调用一个服务,该服务在启动时加载包含对其他引用的xml。 xmls,每个应用程序一个,包含配置本身。
现在,它是可扩展的,由花哨的可重用抽象,提供者和所有人组成,但我仍然认为,如果我们有一天真正重复使用它的一部分,花费时间来弥补它,我们可以制作从旧代码开始或复制/过去所需的代码并进行修改。
您对此有何看法?你能指出一些有关这个问题的有趣参考吗?
由于
答案 0 :(得分:1)
简单回答:编程语言提供数据结构和组合它们的方法。首先直接使用这些,不要抽象。如果您发现要维护的表示不变量由于可能无法控制的大量使用站点而被破坏的风险很高,那么请考虑抽象。
为了实现这一点,首先提供函数并转换调用站点以使用它们而不隐藏表示。仅当您对功能表示足够满意时才隐藏数据表示。确保此时记录受保护的不变量。
这是一个“极端编程”版本:在你有破坏程序的测试用例之前不要抽象。如果您认为可以违反不变量,请先写下破坏它的情况。
答案 1 :(得分:0)
抽象可以更容易地构建软件并理解它是如何组合在一起的,但它使得完全理解性能和安全性方面的某些问题变得复杂,因为抽象层引入了某些类型的复杂性。
托瓦兹的立场并不荒谬,但他是极端分子。答案 2 :(得分:0)
这是一个类似的问题:https://stackoverflow.com/questions/1992279/abstraction-in-todays-languages-excited-or-sad。
我同意@Steve Emmerson - “工作中的编码员”会给你一些关于这个问题的优秀观点。