Thrift RPC 系列教程(5)—— 介面設計篇:struct & enum設計
阿新 • • 發佈:2018-11-10
好的介面,如同漂亮的美女,是人都會多看一眼。
一個示例
比如,要我們設計一個 User。那很簡單,典型的 class 嘛,按照 OOP 的套路走就行了,於是:
struct User{
1: string id;
2: string name;
3: i64 age;
4: string address;
...
}
這樣的設計,不能說特別糟糕,也不能說特別完美 。實際上,我們可以讓這個 class 更加清晰直觀一點。
實際開發中的思考
實際中的 class,需求其實還是挺多的,比如
- 屬性也許會很多(比如十幾項屬性?)
- 需要某個屬性,有預設值
- 需要某個屬性,可設定可不設定
- 需要某個屬性,強制設定,並提供很直觀的提示
- 等等等等
好的語言設計者,應該會考慮到這些。幸好,作為典型實用派的Thrift,考慮到了這些。
充分利用好 Thrift 提供的特性
在 Thrift 的官方文件中,說明這些特性。見:https://thrift.apache.org/docs/idl#field-requiredness 。無非是從語法層面上,提供一些關鍵詞,讓讀程式碼的人,維護程式碼的人,能夠有個清晰的認知。
比如,上面我們的 User,大概可以變成這樣:
struct User{ 1: required string id; // 需要明確指定ID 2: required string name; // 需要明確指定name 3: optional i64 age; // 年齡, 可填可不填 4: optional string address; 5: optional bool isAdmin=false; // 預設屬性, 需要設定時,就去設定 ... }
這樣,哪些應該有,哪些可以沒有,都是一目瞭然的。
enum 的設計
由於Thrift 並未為 enum 提供很多功能,所以 enum 寫起來就很簡單了,注意命名風格即可:
enum GenderEnum {
MALE = 1,
FEMALE = 2,
}