出處 , 有繁體中文版, 有些部分簡體中文版也翻得很好
在開始寫 models code 之前, 花些時間思考哪些資料需要被儲存, 以及不同 obj 的關係。
我們知道跟書有關的資料要被存起來 ( 書名、 摘要、 作者、 編號 ... ), 也可能會有多個副本 ( 全域唯一 id 、 目前可取得狀況 ); 或是要儲存更多作者資訊, 因為作者也許不只一人, 亦或是有些作者同名同姓。 我們希望能夠根據書名、 作者、 種類、 目錄來分類
設計 models 時, 為每個 obj ( 相關資訊群 ) 各自設計 models, 這個範例中, 最明顯的 obj 就是書本、 作者
我們也期待可以用 models 做選單, 而不是用寫死的選項, 這樣之後才有修改的靈活度, 最明顯的範例可以舉書的種類: 科學、 科幻、 文學 ... 可能還會再新增
當我們決定 models & fields, 就可以思考它們的關係
下方 UML 流程圖顯示我們定義的 models ( 畫成好幾個盒子 ), 就跟前面提到過的, 建立以下 models: 書籍 ( 書本細節 )、 book instance ( 副本借閱狀態 )、 作者。 還會有一個書本種類的 model, 它的值以動態方式產生。 另一方面, 我們決定不要 BookInstance:status
models, 直接把值寫死, 因為我們預期它的值是固定的幾個。 每個盒子都可以看到 model name, field names & types, methods & method return type
這個圖也顯現 models 之間的關係和多重性 (multiplicities)
, 多重性是每個 model 最大跟最小值的數字。 例如: 連繫 Book
& Genre
之間線的兩端有數字顯示, Book
model 端的數字(0..*) 表示一個 "Genre" 包含零個或多個 "Book", 而 Genre
端的數字, 表示 "Book" 可以有零種或多種 (蛤?)
Note: 下段我們會討論 Mongoose primer, 定義 documents/models 之間的關係 in one model
通常是較佳的做法, ( 我們還是可以透過另一個 model __id
找到反向關係 )
下方我們已經在 Book schema 中定義下列這些關係: Book/Genre, Book/Author; 還有BookInstance Schema 中的 Book/BookInstance。 這可以任意決定, 我們可能在其他 schema 也已經有這些 field
Note: 下段我們會解釋如何定義即使用 models, 同時可以思考上圖是如何構築每個 models