anti-patterns - 您必须维护的最不健全的程序是什么?

标签 anti-patterns

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。




9年前关闭。




我定期被要求对由真正的火箭外科医生 build 的系统进行维护工作。它有很多错误,很难知道从哪里开始。

不,等等,我将从头开始:在项目的早期,设计师被告知系统需要扩展,他读到可扩展性问题的一个来源是应用程序和数据库之间的流量服务器,所以他确保尽量减少这种流量。如何?通过将所有应用程序逻辑放在 SQL Server 存储过程中。

严重地。大量的应用程序功能由 HTML 前端制定 XML 消息。当中间层收到一条 XML 消息时,它使用文档元素的标签名称作为它应该调用的存储过程的名称,并调用 SP,将整个 XML 消息作为参数传递给它。它接受 SP 返回的 XML 消息并将其直接返回给前端。应用层没有其他逻辑。

(中间层有一些代码可以根据模式库验证传入的 XML 消息。但是在确定 1)只有少数消息具有相应的模式后,我将其删除了,2)消息实际上并不符合到这些模式,以及 3) 在验证消息后,如果遇到任何错误,该方法将丢弃它们。 “这个 fusebox 是一个真正的节省时间 - 它来自工厂,预装了便士!”)

我以前见过做错事的软件。很多。我已经写了很多。但我从来没有见过像钢铁般坚定的决心在每一个可能的转折点做错事,这体现在这个系统的设计和编程中。

好吧,至少他按照他所知道的去做,对吗?嗯。显然,他所知道的是Access。而且他并不真正了解Access。或者数据库。

这是此代码中的一个常见模式:

SELECT @TestCodeID FROM TestCode WHERE TestCode = @TestCode

SELECT @CountryID FROM Country WHERE CountryAbbr = @CountryAbbr

SELECT Invoice.*, TestCode.*, Country.*
从发票
JOIN TestCode ON Invoice.TestCodeID = TestCode.ID
JOIN Country ON Invoice.CountryID = Country.ID
WHERE Invoice.TestCodeID = @TestCodeID AND Invoice.CountryID = @CountryID

好的。您也不信任查询优化器。但这又如何呢? (最初,我打算在 What's the best comment in source code you have ever encountered? 中发布此内容,但我意识到除了这个评论之外还有很多东西要写,而且事情已经失控了。)在许多实用程序存储过程的末尾,您将看到如下所示的代码:

-- 修复 NULL
SET @TargetValue = ISNULL(@TargetValue, -9999)

是的,该代码所做的正是您无法让自己相信它正在做的事情,以免您发疯。如果变量包含 NULL,他会通过将其值更改为 -9999 来提醒调用者。以下是这个数字的常用用法:

-- 获取目标值
执行 ap_GetTargetValue @Param1、@Param2、输出 @TargetValue
-- 检查目标值是否为 NULL 值
如果@TargetValue = -9999
...

真的。

关于这个系统的另一个维度,参见thedailywtf.com上题为I Think I'll Call Them "Transactions"的文章。 .我不是在编造任何这些。我发誓。

当我在这个系统上工作时,我经常想起沃尔夫冈·泡利 (Wolfgang Pauli) 对一位学生的著名回应:“那是不对的。它甚至没有错。”

这真的不可能是有史以来最糟糕的程序。这绝对是我整个 30 年 (yikes) 职业生涯中工作过的最糟糕的一次。但我还没有看到一切。你看到了什么?

最佳答案

我曾经试图写一个 MP3解码器。它没有用。

关于anti-patterns - 您必须维护的最不健全的程序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/214836/

相关文章:

version-control - TFS——级联分支机构的可持续性

java - 这是一种反模式还是违反了一些设计原则?

design-patterns - 什么是反模式?

mvvm - 模态是MVVM中的反模式吗?

model-view-controller - Ext JS 的 MVC 是反模式吗?

anti-patterns - 这个反模式(一个带模式的函数)有名字吗?

.net - 寻找最佳实践。扩展第三方产品以尽可能轻松地合并新版本有哪些注意事项

java - 请问java RMI的意义?

javascript - 是否建议从网页启动可执行文件

c++ - 如何让人们相信一个有 11975 行代码的类是不好的? (不是吗?)