🧩 第六章 重用:OOP带来的软件重用和思想重用
📄 一句话概括

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. 查一查你用的框架有哪些命名约定,挑一条违反它试试看报什么错。
  2. 想一想:你项目里有哪些配置其实可以由约定推出来。

常见误区

  1. 以为约定优于配置就不用懂配置。知道约定才能不写配置。
  2. 以为命名只是风格问题。在约定驱动的框架里,它是功能问题。
自测三问(点开对答案) 1. Rails 带火了哪两样东西? —— Ruby 这门语言,和那句【约定优于配置】。 2. 实测省了多少? —— 类名 Order 自动推成表名 orders、字段直接从实例可见,0 行配置;显式配置要写 4 行,每个模型省 4 行。 3. 这条思路的代价是什么? —— 名字一改约定就断,所以必须守命名规矩——命名不是风格问题,是功能问题。

相关笔记