打造一個線上board game平台 - Part 2
Post by adam at 2019-03-28
有了計畫要寫一個通用的遊戲大廳之後,就開始想像整個流程。一個玩家進到大廳,網站就需要他輸入使用者名稱。不管是在聊天室裡打屁,還是開遊戲對戰室,都會有這個需求。之後如果要新增一些功能,遲早要建立使用者管理系統。那就趁早在規畫時期把地基打穩吧!
在做Winstons & Ohnoes的網路對戰功能時,把後端資料庫掛在Google Cloud Datastore上。那時就有看到Google Firebase。但是當時看了一下實作的細節,覺得好像要花一些時間了解才比較能上手,所以就回頭去用舊有的Google Cloud Datastore先完成再說。效果確實也不錯。
這次要寫個通用大廳,加上我對網路程式設計的了解越來越多,所以決定用Firebase來實作。一方面是Google目前正在強推,所以開發重心都在這,除了Firestore、Realtime Database之外,Firebase還支援帳號管理的大部分基礎功能。例如:
- 註冊新使用者
- 登入驗證
- 修改密碼
- 寄出重設密碼的電子郵件
大幅降低建置網站的時間。註冊新使用者的部分,還能直接整合Google、Facebook、Twitter帳號,直接讓使用者以原有的帳號登入,也是一大方便。
實作的部分,我基本上是參考這篇的步驟。我沒有買書,完全是看React文件跟一些網路上的範例邊學邊做,所以一直處在一知半解的狀況。看了Think in React之後,雖然是對React的設計哲學有較多的理解,但都沒有看到Best Practice的文章。
這篇文章的步驟跟網站元件的架構都很值得參考。從一開始就把每個元件分資料夾放。讓元件各自獨立,你會更注意每個元件的用法。另外一個好用的pattern是recompose這個package。讓元件可以直接用compose的方式,擁有某項能力。例如:
- withRouter():可以讓元件能直接跳轉到其他URI
- withFirebase():可以讓元件有能力對Firebase資料庫操作
- withAuthentication():可以驗證使用者是不是Firebase資料庫裡的使用者。
- withAuthorization(): 可以騤證使用者有沒有權限瀏覽某些頁面。
完成使用者管理的功能之後,Adam & Alvin的遊戲基地就成型了。
複習一下,當初的規畫。
大廳元件
- 頁首(header)
- 頁尾(footer)
- 側欄(sidebar)
- 主畫面(main-contain)
- 聊天室(chat-room)
現在改成:
大廳元件
- 頁首(AppBar)
- 頁尾(Footer)
- 側欄(Menu)
- 主畫面(main-contain)
- 聊天室(chat-room)
頁首由AppBar取代,側欄的部分也在AppBar上可以搞定。使用者可以利用AppBar進行註冊、登入、進大廳主畫面等等動作。Part 3的目標是把聊天室做出來。可能會跟頁尾做結合,把它Dock在網頁的下方。可以展開跟縮小。等聊天室完成,再把Winstons & Ohnoes掛上來。再重新把網路對戰的功能改的更方便一點。今天就到這啦!