1

前几天,我偶然发现了 Linus Torwalds 的一篇相当古老的 usenet 帖子。当他为自己选择使用纯 C 语言而不是更现代的东西进行辩护时,这是臭名昭著的“你充满了公牛****”的帖子。

特别是这篇文章让我想到了在我工作的地方积累了大量的抽象层。我的是一个 Windows .Net 环境。我必须说我喜欢 C# 和 .Net 环境,它确实让大多数事情变得简单。

现在,我来自一个非常不同的背景,由 Unix 技术(如 C 和过多或脚本语言)组成;对我来说,OOP 只是一种,并不总是最好的编程范式。我经常(以一种工作方式,当然!)与我的同事(尤其是一个)斗争,因为他们似乎是“任何问题都可以通过额外的抽象层次来解决”教会,而我更多的是“保持简单”的学校。我认为对于可能来自不同文化的问题,有一种非常不同的心理方法。

作为一个非常简单的示例,对于我在这里所做的第一个项目,我需要为应用程序进行一些配置。我制作了一个 10 行的类来加载和解析一个 txt 文件,该文件位于程序的根目录中,其中包含冒号分隔的键/值对,每行一个。有效。

最后,为了标准化配置问题的方法,我们现在在每台运行每个配置程序的机器上都有一个库,该程序调用一个服务,在启动时,加载一个包含对其他 xml 的引用的 xml,一个每个应用程序,其中包含配置本身。

现在,它是可扩展的,由花哨的可重用抽象、提供程序和所有组成,但我仍然认为,如果有一天我们真的碰巧重用了它的一部分,随着时间的推移,我们可以制作所需的代码从开始或复制/过去旧代码并修改它。

你对此有什么想法?你能指出一些有趣的参考来处理这个问题吗?

谢谢

4

3 回答 3

1

简单的答案:编程语言提供数据结构和组合它们的方法。一开始直接使用这些,不要抽象。如果您发现由于大量使用站点可能超出您的控制范围而存在被破坏的高风险表示不变量需要维护,那么请考虑抽象。

要实现这一点,首先提供函数并将调用站点转换为使用它们而不隐藏表示。仅当您对功能表示足够满意时才隐藏数据表示。确保此时记录受保护的不变量。

一个“极端编程”版本:在你有破坏你的程序的测试用例之前不要抽象。如果您认为可以破坏不变量,请先编写破坏它的案例。

于 2011-12-26T00:26:29.440 回答
0

抽象使得构建软件和理解它是如何组合起来变得更容易,但它使完全理解围绕性能和安全性的某些问题变得复杂,因为抽象层引入了某些类型的复杂性。

Torvalds 的立场并不荒谬,但他是一个极端分子。

于 2010-02-17T15:15:14.677 回答
0

这是一个类似的问题:https ://stackoverflow.com/questions/1992279/abstraction-in-todays-languages-excited-or-sad 。

我同意@Steve Emmerson 的观点——“工作中的程序员”会给你一些关于这个问题的绝佳视角。

于 2010-02-17T15:15:21.383 回答