與其前後端分離,不如單體多模

承續之前寫的〈在 Web 上使用 Material Design 元件〉,在撞牆一天多之後,找到原因,總算順利讓 Vuetify 動起來,不過這個強制包裹 <v-app/> 的要求,與我希望在專案漸進導入 Vue 的打算有所衝突,所以我可能會退回使用其他方案。

在這過程之中,我不免又再思考起我這個專案的初衷與基本要求:

  1. 我希望這個網站的內容是 SEO friendly, Web crawler friendly 的,我希望兼顧 SNS 元素,同時希望上頭的資訊不會被關在 crawler 爬不到(或很難爬到)的黑洞、黑盒子裡。
  2. 我希望這個網站的操作是 keyboard friendly 的,行有餘力,再追求 touchscreen friendly。
  3. 我希望這個網站有一定程度的資訊即時更新能力,但是這也是行有餘力再追求的 nice to have。
  4. 我希望這個網站的搜尋能力比 Twitter, PTT 好,這就不是 nice to have 了,而是 essential。
  5. 我希望這個網站的設計風格給人溫暖的感受。

基於以上種種,我今天得到的想法是,這個專案的設計應該是「與其追求前後端分離,不如單體多模」。

我指的「前後端分離」前端是那種 fat client 式的前端,地位等同於 App,也就是很簡單就可以化身為 PWA 的那種前端,而不是為了 SEO 搞的 SSR 那種夾在中間,角色尷尬的前端。看到 SSR 享受不到 token authentication 的優點,我就覺得一整個阿雜,雖然顧及了 SEO friendly,卻很難喜歡這樣在我看來疊床架屋的架構。這樣做的好處只剩下「前後端開發者各司其職」,就只是這樣而已,我覺得。

如果要這樣,不如取法 Redmine, WordPress 這些專案「單體多模」的設計,可獨立運作,也提供 API 給其他「泛前端」使用。

或許專業的前端開發者在這樣的架構下很難(用喜歡的、慣用的前端框架)做事,但是這個專案截自目前就只是我一個人的 side project,根本也不存在什麼「專業的前端開發者」與我共事,所以不用想太多,又或者,我在用「單體統包」設計的同時,也提供 API 另外搞一份前端實作,這樣追求「實用」與「練新功夫」就都顧及了。

CC BY-SA 4.0 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.