📄 一句话概括
Rails 带火的不只是 Ruby,还有那句【约定优于配置】——实测每个模型省 4 行配置,代价是名字必须守规矩。
📝 本节和前面几节的关系
6.12 收完这一章,这个专栏讲一种不用写配置的复用思路。
一、它带火了两样东西
一样是 Ruby 这门语言,另一样是那句口号:约定优于配置。 过去的框架要求你把表名、主键、字段一个个写进配置。 Rails 的做法相反:按命名规矩猜,猜对了就一行不用写。
二、实测这个差别
约定版:类名 Order → 表名自动是 orders,0 行配置。
字段从实例上直接看得到,也不用声明。
显式配置版要写 4 行(表名、主键、字段列表、字段类型),每个模型都省 4 行。
三、为什么这条思路能扩散
因为它把【重复的样板】变成了【默认行为】——和 6.6 框架替你写骨架是同一件事。 代价也很清楚:名字一改,约定就断。所以它要求你守规矩。 这条思路后来扩散到整个行业,但前提始终是:约定要能被猜到。
四、一个提醒
约定不是【不用知道】,是【知道了就可以不写】。 新人最常犯的错:不知道约定,名字起得随意,框架猜不到,于是到处报错。 所以学框架的第一课往往是【命名规矩】——那不是风格问题,是功能问题。
五、动手 Demo:因 Rails 框架而走红的 Ruby
用命名约定自动推断表名和字段,对比显式配置要写几行。 看省下的配置量。
class Model:
def table_name(self):
return type(self).__name__.lower() + "s"
def columns(self):
return [k for k in vars(self)]
class Order(Model):
def __init__(self):
self.id = 1
self.total = 99
o = Order()
print(o.table_name(), o.columns())
实跑输出:
--------------------------------------------------------------------
因 Rails 框架而走红的 Ruby
--------------------------------------------------------------------
专栏【当今的OOP】讲 Rails:**它带火的不只是 Ruby,还有一句口号——**
**【约定优于配置】。**实测这个差别的量:
约定版:表名 orders(从类名推的,0 行配置)
约定版:字段 id/total(从实例上看出来的)
显式配置版要写 4 行
省下 4 行/每个模型
做法 配置几行 代价
-----------------------------------------------
约定优于配置 0 行 名字必须守规矩
显式配置 每项一行 写得多,但看得见
**Rails 火起来的原因就在这张表**:把【命名规矩】当成配置文件用。
**代价也很清楚:名字一改,约定就断**——所以它要求你守规矩。
**这条思路后来扩散到整个行业**,但它的前提始终是:**约定要能被猜到。**
实测:类名 Order → 表名 orders、字段直接从实例上看到,0 行配置;显式配置要写 4 行。 代价是名字必须守规矩——名字一改约定就断,所以学框架的第一课往往是命名规矩。
30 秒实验
- 查一查你用的框架有哪些命名约定,挑一条违反它试试看报什么错。
- 想一想:你项目里有哪些配置其实可以由约定推出来。
常见误区
- 以为约定优于配置就不用懂配置。知道约定才能不写配置。
- 以为命名只是风格问题。在约定驱动的框架里,它是功能问题。
自测三问(点开对答案)
1. Rails 带火了哪两样东西? —— Ruby 这门语言,和那句【约定优于配置】。 2. 实测省了多少? —— 类名 Order 自动推成表名 orders、字段直接从实例可见,0 行配置;显式配置要写 4 行,每个模型省 4 行。 3. 这条思路的代价是什么? —— 名字一改约定就断,所以必须守命名规矩——命名不是风格问题,是功能问题。- ☐ 下一章(第七章 化为通用的归纳整理法的面向对象)
相关笔记
- 框架是应用程序的半成品 — 同一件事的骨架版
- 通过类库和模式发现的重用的好处 — 正文收束
- 原因之一:OOP结构复杂 — 复杂与约定的取舍
- 🧩 面向对象是怎样工作的 · 索引