Model Object Relationship Map

Model Relationship Picture
之前在學Ruby時,看到書上有像上面這種Model關係圖。在還沒開始進到我現在的這間公司前,其實我連什麼是MySQL、Oracle都不知道,也從沒下過SQL語法存取DB。大學時,修的課程裡,其實大多跟現在會用的東西都沒什麼關係。除了一門資料結構的課程和計概學的C語言比較有幫助外,其它像什麼組合語言、IC邏輯設計…etc.現在根本沒在碰。後來想想其實我的興趣應該是寫軟體的,應該去讀資工才對。Any way,這些都是題外話。我要說的是,由於以前從沒學過這方面有關資料模型的東西。所以在寫一個新的網頁程式時,都不會先去想資料模型彼此的關係,即使進公司已經寫了3年的Java。

這次學Ruby on Rails時,很認真的把這兩本書看完。
9789866840128 9867794923
而在Ruby on Rails建置與執行這本書中,作者為了要說明範例程式的設計概念,便使用了類似上面的資料模型圖。知道可以用資料模型圖去描述物件的關係後,我便試著在開發新網頁程式時使用看看,邊想邊畫。經過了一段時間的演練,發現透過模型圖,可以在程式開發初期就想好物件之間的關係結構。之後真正coding時,邊看圖邊寫,比邊想物件關係邊寫來的更清楚也更快。真是非常好的磨練。忽然間,感覺程式功力又增進了不少,彷彿像玩魔獸學到一個強力新技能般 XD。所以在這裡介紹一下這張圖的概念,希望有志成為一個死阿宅的工程師們,也可以學學 ^^

想像你要做一個討論區的Web Site。一個討論區有什麼? 使用者帳號是一定要的,right? 再來是討論區一定可以寫文章,可以回文。一篇文章中可能還可以夾圖片,還有下標籤。光看這樣的描述,有可能會想到5個模型。不過我打算將回文(Comment)也算成是文章(Post)的一種,Comment可以當成是有parent的Post物件。接下來,開始分析這4個model的關係:
一個帳號(Account)會有許多篇文章(Post)
一篇文章(Post)會有許多回文(Post)
一篇文章(Post)會有許多圖片(Image)
一篇文章(Post)會有許多標籤(Tag)
一個標籤(Tag)會有許多文章(Post)

首先,一個帳號會有許多文章,代表Post是「屬於」Account所有。所以會有個箭頭從Post指向Account。

再來,一篇文章會有許多回文,代表Post的不同instance間有關係串聯。所以圖中Post Model那裡,會有個箭頭指到自己。

一篇文章會有許多圖片,就像第一個描述類似,Post「擁有」Image。所以會有個箭頭從Image指向Post。

最後,一篇文章會有許多標籤,同時,一個標籤會有許多文章。所以這兩個Model互相擁有彼此,因此有個雙向箭頭在Post及Tag中間串聯。

短短幾分鐘內便把相關的Model關係想好並畫出來。之後真正開始寫code時,只要照著這張圖實作出來即可。這樣一來可以有效降低出錯的機率。當然如果中間想到一些idea,想要臨時加新的Model,也可以直接畫在關係圖裡,只要確保關係正確即可。其實像這種簡單的物件關係,還看不出來這圖好用的地方。說真的要邊做邊想,也不是什麼難事。但如果換成是一個有20種以上的物件、關係複雜的程式呢? 邊做邊想? 也可以啦,只要你的腦頭夠清楚、記憶力夠好也是沒問題的啦… XD

Tags: ,

Leave a Reply