软件设计与设计原则解读
1. 软件设计的重要性
当被问及代码最重要的属性时,大家可能会想到可读性、可测试性、可维护性、可扩展性、可复用性和可伸缩性等。很多人会认为借助 C++ 的一些特性,如 RAII、算法、Lambda 表达式、模块等就能实现这些目标。
C++ 的确提供了丰富的特性,自 C++11 发布后,每三年就会有新的标准带来更多新特性。因此,C++ 社区非常注重特性和语言机制,多数书籍、讲座和博客都围绕这些展开。然而,特性并非项目成功的关键,项目的成功并不依赖于对所有特性的了解或 C++ 标准的选择。即使使用旧标准、仅使用部分特性,项目也可能取得成功。
相比特性,软件项目的整体结构更为重要。这个结构决定了代码的可维护性,包括修改、扩展和测试代码的难易程度;也决定了项目的可伸缩性,如项目能发展到多大规模、多少人可以协同工作而不相互干扰。项目的架构和设计才是成功的核心,好的软件设计比特性的正确使用更为关键。优秀的软件设计能容忍一些糟糕的实现决策,但糟糕的设计无法靠特性挽救。
2. 依赖问题
软件架构和设计对项目质量至关重要,因为软件是不断变化的,这是软件开发的不变规律。软件被称为“软”件,就是因为它相较于硬件更容易改变,并且人们期望它能轻松适应不断变化的需求。
为了说明这一点,假设从问题跟踪系统中选取一个预计工作量为 2 的问题,看似不是大任务,但实际操作中,修改实体 A 后,可能会意外发现需要同时处理实体 B,而这又可能导致实体 C 和 D 出现问题。原本简单的任务可能演变成大规模、高风险的代码修改。
这种情况的根源通常在于“依赖”。正如 Kent Beck 所说:“依赖是所有规模软件开发中
超级会员免费看
订阅专栏 解锁全文
1176

被折叠的 条评论
为什么被折叠?



