高品质的音视频能力是怎样的? | Qcon 全球软件开发大会·上海站邀请函 了解详情
写点什么

"大泥球"仍然是最常见的软件设计

  • 2010-09-17
  • 本文字数:876 字

    阅读完需:约 3 分钟

大泥球,是指杂乱无章、错综复杂、邋遢不堪、随意拼贴的大堆代码。这些年来,为了对付这个泥球,我们看到了多种指导方法,比如 SOLID GRASP KISS ,与其他诸多年代久远的、提倡高内聚、低耦合的方法一起出现。然而,实际情形没多大变化,“大泥球”看起来仍然是设计软件架构的最常见方法。

Dave Nicolette 最近提到他最近看到下面这样一段 Java 代码

public Thing getThing(Integer id) {
return new Beta().getGamma().getDelta().getEpsilon().getOmega().getThing(id);
}

这段代码有很多“味道”,比如:

  • 消息链:要得到结果的调用有六层之深。
  • 不当的亲密关系:客户必须知道其他类的内部结构才能得到结果。
  • 不当的暴露:beta、gamma、delta 等等方法允许了不当的暴露关系,才能得到第三个对象 。

在 Dave 看来

尽管关于该主题已经有非常丰富的信息,看起来开发软件谋生的大多数人要么
(a) 对于任何优秀软件设计的指南完全没有概念,或者
(b) 对指南理解存在严重问题

FJ 也同样回忆起了 Agile 2009 大会中由 Brian Foote Joseph Yoder 主持的一个议程。

大泥球发生的主要原因可以归结为:

  • 一次性代码
  • 碎片式增长
  • 为了让软件不出问题
  • Copy/paste 导致问题转移(有问题的代码被复制到很多地方,不断蔓延)

有趣的是,根据 FJ 的记录,Yoder 认为 Agile 的很多方面会直接导致泥球,包括:

  • 缺少前期设计
  • 应对需求变化过晚
  • 应对架构变化过晚
  • 碎片式增长

Yoder 认为:敏捷之所以能起作用,不是因为其流程,而是因为很多实践能够让人们持续关注技术的卓越性、回顾、面对面沟通和得到激励的个体。 Yoder 推荐的工具之一是:当软件质量下降时,采取简单的重构和测试。因此,看起来并不是流程能够帮助减少泥球,最终还是有责任心的程序员愿意承担责任、保持警惕。除非如此,不管是敏捷还是非敏捷,大泥球总会挥之不去。

正如 Dave 所说:

尽管涌现出各种鼓励、促进良好结构代码的开发方法,软件技艺运动也在不断成长,但是“大泥球”仍然是最常见的软件设计,即使人们已经从过去恶劣的设计中学到了东西,但在新的开发过程中,大泥球仍未消失。

查看英文原文: Big Ball of Mud, Still the Most Popular Software Design

2010-09-17 22:465067
用户头像

发布了 479 篇内容, 共 141.3 次阅读, 收获喜欢 42 次。

关注

评论

发布
暂无评论
发现更多内容

java技术线下面授培训学习好还是自学好

小谷哥

回归理性,直面低代码

华为云开发者联盟

云计算 后端 软件开发 低代码 企业号九月金秋榜

惊为天人!从Sql到Nosql,redis+mysql从架构到优化全覆盖

Geek_0c76c3

Java 数据库 开源 架构

规划问题的概念

OptaPlanner中文

OptaPlanner是什么

OptaPlanner中文

面试官:请实现一个JavaScript深拷贝

loveX001

JavaScript

茂名是几线城市?有正规等保测评机构吗?

行云管家

网络安全 等保测评 等级测评 茂名

阿里P9师傅亲传98K+星的MySQL性能优化金字塔法则手册助我升职P7

Geek_0c76c3

Java 数据库 开源 程序员 架构

Java进阶(三十六)深入理解Java的接口和抽象类

No Silver Bullet

Java 接口 抽象类 9月月更

得物基于 StarRocks 的 OLAP 需求实践

得物技术

数据库 开源 OLAP 开发工具 StarRocks

Java面试:你了解HashMap吗?

钟奕礼

编程 面试 java;

文科生大数据培训需要注意的问题

小谷哥

参加java培训学习难不难?

小谷哥

参加前端培训哪种方式比较靠谱

小谷哥

面试中经常问到的几个问题,快来看看能答对几道吧(Java)

钟奕礼

编程 java;

重磅发布|腾讯云容器安全服务网络隔离功能已上线

腾讯安全云鼎实验室

云安全 容器安全

数维图API文档:SovitJS编辑器开放API说明

数据可视化平台

数维图编辑器 Sovitjs编辑器 数维图API 可视化编辑器 可视化引擎

Java开发学习----SpringBoot三种配置文件解析

钟奕礼

编程 Spring Boot java;

MSE 结合 Dragonwell,让 Java Agent 更好用

钟奕礼

编程 java; MSE

基于Spring Cloud与Docker如何搭建一个电商平台项目

Geek_0c76c3

Java 数据库 开源 程序员 架构

9面阿里Java岗,最终定级P6拿P7工资,分享学习经验

Geek_0c76c3

Java 数据库 开源 程序员 架构

Docker与Jib(maven插件版)实战

程序员欣宸

Docker 9月月更 Jib

从 0 到 1 上手阿里云服务器 ECS(三)

六月的雨在InfoQ

MySQL RDS ECS 云数据库RDS for MySQL 9月月更

web前端开发技术培训需要学习多久

小谷哥

Redis进阶知识点(可学习,可复习,可面试)

钟奕礼

编程 redis 底层原理

膜拜大佬!分享一份京东T9大牛私藏文档:从NIO一直学到Netty

Geek_0c76c3

Java 数据库 开源 程序员 开发

极狐GitLab 15.4 | 四大专享更新、更能打的CI/CD,近 50 项更新全面来袭!

极狐GitLab

DevOps 运维 Harbor CI/CD 极狐GitLab

银行使用堡垒机成功案例分享一二

行云管家

银行 堡垒机 IT运维 IT资产

每日算法刷题Day7-比较字符串大小,去掉多余的空格,单词替换

timerring

算法 刷题 9月月更

腾讯云入选Gartner CPaaS市场指南“代表厂商”,数实融合和全球化布局受认可

科技热闻

Java 8 + 10 = Java 18

钟奕礼

java;

"大泥球"仍然是最常见的软件设计_敏捷_Vikas Hazrati_InfoQ精选文章