摘要: 组件是部署单元。它们是系统中可被部署的最小实体。在 Java 中,组件是 jar 文件;在 Ruby 中,是 gem 文件;在 .NET 中,是 DLL 文件。在编译型语言中,组件是二进制文件的聚合体;在解释型语言中,组件是源文件的聚合体。在所有语言中,组件都是部署的基本粒度单位。 组件既可以被链接 阅读全文
posted @ 2026-03-19 18:48 cyusouyiku 阅读(4) 评论(0) 推荐(0)
摘要: 依赖倒置原则(DIP) 依赖倒置原则(DIP)指出:最灵活的系统是那些源代码依赖仅指向抽象(abstractions)、而非具体实现(concretions)的系统。 在 Java 这类静态类型语言中,这意味着 use、import、include 等声明语句应仅引用包含接口、抽象类或其他抽象声明的 阅读全文
posted @ 2026-03-19 18:33 cyusouyiku 阅读(10) 评论(0) 推荐(0)
摘要: 接口隔离原则(ISP) 图10.1 接口隔离原则 在图10.1描述的场景中,有多个使用者会调用 OPS 类中的操作。假设: User1 只使用 op1 User2 只使用 op2 User3 只使用 op3 现在设想 OPS 是一个用 Java 这类语言编写的类。显然,在这种情况下,User1 的源 阅读全文
posted @ 2026-03-19 18:31 cyusouyiku 阅读(5) 评论(0) 推荐(0)
摘要: 里氏替换原则(LSP) 1988 年,芭芭拉·利斯科夫(Barbara Liskov)提出了如下定义,用于描述子类型。 我们所需要的是一种类似如下的替换性质:如果对于类型 S 的每一个对象 o1,都存在一个类型 T 的对象 o2,使得在所有基于 T 定义的程序 P 中,用 o1 替换 o2 后,程序 阅读全文
posted @ 2026-03-19 18:28 cyusouyiku 阅读(12) 评论(0) 推荐(0)
摘要: 开闭原则(OCP) 由伯特兰・迈耶在 1988 年提出。它的定义是:软件实体应当对扩展开放,对修改关闭。 换句话说:软件的行为应该可以被扩展,而不必去修改这个实体本身。当然,这正是我们学习软件架构最根本的原因。显然,如果需求的一点点扩展,都会迫使软件发生大规模修改,那么这个软件系统的架构师就完全失败 阅读全文
posted @ 2026-03-19 16:42 cyusouyiku 阅读(10) 评论(0) 推荐(0)
摘要: 单一职责原则(SRP) 在所有 SOLID 原则中,单一职责原则(SRP) 可能是最被误解的一个。原因很可能在于它的名字取得特别不恰当。程序员太容易一听到这个名字,就想当然地认为:每个模块只应该做一件事。别搞错,确实有这么一条原则:一个函数应该只做一件事,并且只做这一件事。我们在把大函数拆成小函数时 阅读全文
posted @ 2026-03-19 16:32 cyusouyiku 阅读(6) 评论(0) 推荐(0)
摘要: 在很多方面,函数式编程的概念甚至比编程本身出现得更早。 这种范式强烈基于阿隆佐·邱奇在 20 世纪 30 年代发明的 λ 演算。 整数的平方 要解释什么是函数式编程,最好看例子。 我们看一个简单问题:打印前 25 个整数的平方。 在 Java 这类语言里,我们可能这样写: public class 阅读全文
posted @ 2026-03-19 16:03 cyusouyiku 阅读(4) 评论(0) 推荐(0)
摘要: 面向对象(OO)的本质:架构视角的解读 我们即将看到,优秀架构的根基是对面向对象设计(OO)原则的理解与应用。但究竟什么是 OO? 有人说:“是数据与函数的结合。” 这个答案虽被频繁引用,却毫无说服力——它暗示 o.f() 和 f(o) 有本质区别,这显然荒谬。早在 1966 年 Dahl 和 Ny 阅读全文
posted @ 2026-03-19 16:00 cyusouyiku 阅读(4) 评论(0) 推荐(0)
摘要: 埃兹格・维贝・迪杰斯特拉 1930 年出生于鹿特丹。他在二战中躲过了鹿特丹大轰炸和德国对荷兰的占领。1948 年,他以数学、物理、化学、生物全满分的成绩高中毕业。 1952 年 3 月,21 岁的迪杰斯特拉进入阿姆斯特丹数学中心工作,成为荷兰第一位程序员。 1955 年,当了三年程序员、仍在读大学的 阅读全文
posted @ 2026-03-19 15:55 cyusouyiku 阅读(14) 评论(0) 推荐(0)
摘要: 本章讲解三种不同类型的编程范式-结构式编程,面向对象编程和函数式编程 结构化编程 第一个被广泛采用的编程范式(但并非最早被发明的)是结构化编程,由艾兹格・迪杰斯特拉在 1968 年提出。迪杰斯特拉证明:无限制的跳转(goto 语句)会破坏程序结构。我们在后续章节会看到,他用我们更熟悉的 if/the 阅读全文
posted @ 2026-03-19 15:45 cyusouyiku 阅读(17) 评论(0) 推荐(0)
摘要: 每个软件系统提供两个不同的价值:行为和结构。开发者有责任确保这两个价值一直高,遗憾的是,他们常常只关注其中一个,而完全忽略另一个。更遗憾的是,他们往往关注的是两者中价值更低的那个,最终导致软件系统变得毫无价值 行为 软件中的第一个价值就是行为,股东雇佣开发者让机器对他们来说表现地更省钱,我们通过帮助 阅读全文
posted @ 2026-03-19 15:39 cyusouyiku 阅读(6) 评论(0) 推荐(0)
摘要: 人们总是把架构一词用在脱节底层细节的高层事物上,而设计则更多被用来代替较低层级的结构与决策,但是如果你真正看看架构师在做什么究竟,就会发现这种用法毫无道理。 想想为我设计新家的那位建筑师吧。这套房子有没有建筑设计?当然有。那什么是建筑设计呢?其实就是房子的造型、外观、立面效果,以及各个空间和房间的布 阅读全文
posted @ 2026-03-19 15:25 cyusouyiku 阅读(4) 评论(0) 推荐(0)