2010-02-17 31 views
1

有一天,我偶然发现了Linus Torwalds的一个相当旧的usenet帖子。这是臭名昭着的“你充满了公牛****”的职位,当他捍卫他选择使用简单的C为Git而不是更现代的东西。抽象与否?

尤其是this post让我想起了大量的抽象层,这些抽象层积累在我工作的其他层上。 Mine是一个Windows .Net环境。我必须说,我喜欢C#和.Net环境,它使大多数事情变得简单。

现在,我来自一个非常不同的背景,如Unix的C语言和过多的脚本语言;对我来说,OOP也只是其中之一,并不总是最好的编程范式。我经常与同事(特别是一个人)一起奋斗(当然是以一种工作方式!),因为它们似乎是“任何问题都可以通过额外的抽象水平来解决”教会,而我更像是“保持简单”的学校。我认为对接触不同文化的问题可能有一种截然不同的思维方式。

作为一个非常简单的例子,对于我在这里做的第一个项目,我需要一些应用程序的配置。我创建了一个10行类来加载和解析一个txt文件,该文件位于包含冒号分隔的键/值对的程序根目录中,每行一个。有效。最后,为了使配置问题的方法标准化,我们现在有一个库位于运行每个已配置程序的每台机器上,该程序调用一个在启动时加载一个xml,该xml包含其他xmls,每个应用程序一个,其中包含配置本身。现在,它是可扩展的,由可重复使用的抽象概念,提供者和所有组成,但我仍然认为,如果我们有一天确实需要重用其中的一部分,并花费时间来完成它,我们可以从开始或复制/过去旧代码中修改所需的代码并对其进行修改。

您对此有何看法?你能指出一些有关这个问题的有趣的参考吗?

感谢

+1

你的问题是什么?你问具体的配置代码吗? –

+2

民意调查应该是社区维基。 – 2010-02-17 15:16:43

+1

添加抽象层* *保持简单。额外抽象的目的是在不同层次上简化事物。 –

回答

0

抽象使得它更容易构建软件,并了解它是如何放在一起,但它周围的性能和安全性完全理解某些问题复杂化,因为抽象层引入特定类型的复杂性。

托沃兹的立场并不荒谬,但他是极端主义者。

1

简单的答案:编程语言提供数据结构和组合方式。首先直接使用这些,不要抽象。如果你发现你有代表不变量来维护由于大量可能不受控制的使用地点而处于高风险的破坏风险,那么考虑抽象。

为了实现这一点,首先提供函数并转换呼叫站点以使用它们而不隐藏表示。只有当您满意时,才能隐藏数据表示形式。确保在此时记录受保护的不变量。

这是一个“极端编程”版本:直到你有测试用例破坏你的程序时才抽象。如果你认为这个不变量可以被破坏,那就先写下这个案例。