模块化是好事, 以及, 它让我联想到了 C 语言, 以及它那如同平原一样的命名空间.
为什么需要模块化
所谓『模块化』, 是一种很自然的事情, 体现了『分而治之』的思想.
坦白来说, 这是一个无需过多讨论的话题. 如果你写过 C 语言, 就会对它那『近乎平坦』的命名空间, 感到熟悉. 所有的函数, 变量都在同一个全局命名空间 (static 类型的除外, 事实上, static 函数, 是 C 语言中少数的模块化手段之一). 如果你 include 一个东西, 你都不知道你在干嘛, you know nothing. 比如:
- #include <stdio.h>
- #include <stdlib.h>
有时候我也许能记得 printf 在 stdio 里面, 但大部分时候我的记性不怎么好, 也不爱记忆这种东西.
而且, 为了防止命名冲突, 大部分时候, 我们都要给我们的函数, 加各种命名前缀, 比如, 写一个链表实现的时候, 会出现诸如 List_Add(List* l, void* item) List_Remove(List* l, void* item) 这样的东西. 这和上古时代的『匈牙利命名法则』(感兴趣的朋友, 可以百科搜索一下), 何其相似, 各种无聊的 btn 前缀, 不明觉厉的变量命名.
关键是, 在比较现代化的编程语言中, 或者比较现代化的编程 IDE 中, 偶尔能看到这样的命名风格, 这时让人有一种莫名的, 穿越上的喜感.
Thrift 中的模块化
幸好, Thrift 虽然借用了 include 这个关键字, 但是没有搞成 C 语言那样 (也许用 import 是更好的选择?). 用法如下:
- // 导入一个模块, 模块的访问空间, 就是文件名
- // 这里及其明确清醒, 甚至需要写清楚文件名后缀
- include "shared.thrift"
- // 使用
- // 必须要加命名空间前缀, 否则访问不到对应的要素
- service Calculator extends shared.SharedService {
- }
和这个使用感觉, 最相同的, 就是 Go 语言了, 既简单又明确.
来源: https://juejin.im/post/5be3d0d2e51d453bb92a0b7f