iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 19
1

感謝吾友阿貓,每日文章完成後給予我許多意見回饋,也啟發我今日的靈感。

在昨天的現代網站框架重要元素整理中,我整理了八種我認為(完整的)現代網站框架應該具備的元素,其中一點我提到了**「project console」**。這一名詞未見於文件與資料當中,因為是我個人的命名,我實在不知道該怎麼統稱不同框架裡的這項功能,雖然或許可以稱之為 CLI(command-line interface),但又不僅於此,容易與語言本身的CLI介面混淆。

首先來介紹一下CLI(command-line interface),根據維基的介紹:

命令列介面(英語:command-line interface,縮寫:CLI)是在圖形使用者介面得到普及之前使用最為廣泛的使用者介面,它通常不支援滑鼠,用戶通過鍵盤輸入指令,電腦接收到指令後,予以執行。

每個語言通常會提供一個CLI的環境,供人們練習互動,例如在terminal輸入irb可以進入Ruby cli,輸入iex可以進入Elixir cli,但是我這邊所指稱的「project console」不僅於此。若以Rails為例,當我們使用rails console進入的環境介面,才是我指稱的project console,名稱由來是因為會載入專案環境且rails稱為console而得名,每個框架有不同名稱,下面依序介紹之:


Rails console

我查了一下rails官方文件,正式名稱就是Rails console,指令也是rails console(可簡寫為rails c)。基本上底層其實也是irb,唯一的不同是預先載入專案,同時也是所有框架裡唯二會預先全載入的(Laravel貌似也會載入)。預先載入有好有壞,對像我這樣懶惰的工程師來說,自然是覺得相當方便,反正使用console時不需要考慮效能問題。

只是在一個情境下可能會有狀況:假如載入的過程中發生異常或錯誤,會使得連console都進不去,對新手而言很可能造成恐慌也說不定(出了bug想進console檢查處理,發現連console都進不去~囧!),這勉強算是一個預先全載入的缺點吧(?)雖然我覺得跟他節省的時間比起來,根本不算什麼損失。

console有兩個重要的參數可以使用:首先是環境,預設當然是開發模式(development),依照需求也可以切換為staging或production,指令是rails c 環境名稱。進入後可以用Rails.env會回傳當前的環境名稱;另一個是沙盒模式(sandbox),console裡的指令會跟資料庫互動,即使是開發環境,有時候亂刪資料也是會造成一些困擾,沙盒模式的好處是退出後會把資料庫還原(rollback),一切都當作沒發生過,相當的便利,指令是rails c --sandbox

Phoenix IEx

我在官網上找不到正式稱呼,他們只說了 "You can also run your app inside IEx (Interactive Elixir) ",姑且就叫他「Phoenix IEx」吧!指令如下:

$ iex -S mix phx.server
// 但是這樣好像也可以(不好意思我沒有查到差別是什麼,如果你知道請告訴我)
$ iex -S mix

有關使用的教學與一些簡單的練習,我在之前的「Phoenix起步走:Changesets基本操作」已經有提過,這邊就不再贅述。跟Rails相比,呼叫model需要全稱專案名稱這點有點麻煩,實務上好像都會先設定別名(像是alias Hello.User),對討厭麻煩的我來說是個缺點。

Django shell

我在之前的「Django起步走:基礎QuerySets」有示範過基本用法,指令如下:

$ python manage.py shell

如同之前說的,做任何model操作前都要先from ... import ...,只好把他理解為不同的設計哲學。對討厭麻煩的人(例如我)來說,也會被視為缺點。

Artisan tinker (Laravel)

「tinker」嚴格來說並不是Laravel的工具而是Artisan的工具,但總得來說是用來幫助Laravel專案的。詳細示範在「Laravel起步走:artisan tinker操作ORM練習」裡面有,指令是:

$ php artisan tinker

跟Rails console一樣,操作前不需要載入model,可以直接呼叫,Laravel加10分(!)


除了Rails之外,其他三個框架都在介紹ORM操作的時候使用過console的基本功能,今天蠻像是自己收割自己,但也沒有到OP的程度。載入與不載入雖然是很小的事情,但這樣的設計差異,就反映了不同框架的性格,影響了使用者的情緒。換個角度,就是框架的作者對工程師抱有的期待不同:例如rails就是最寵孩子的父母,任何多餘的動作都不需要,哪怕是多一行。這樣的設計當然會被視為相當貼心,使用者也可以感受到被作者(框架)寵愛著;但對著喜歡高自由度的開發者來說,可能就會覺得礙手礙腳、自作聰明,與其框架預設慣例,更喜歡一個空白空間自由發揮。

這其實是一個產品設計上永久的兩難課題,功能越來越多以後,設定操作上無可避免就會成了儀表板然後失去「易用性」(例如Amazon系列);每當這個時候就會出現懶人包或一鍵設定的產品(例如Heroku),讓懶惰的人可以省去九成的時間使用九成的人都需要的常用功能,剩下的一成微調就好。天平的兩端都會有令人滿足的產品,選擇不過是需求或個性上的事。只是對我個人而言,我偏愛後者罷了(我是懶人)。

另外今天是首次嘗試傳統文體,有別於之前一句一行類似PTT的格式,自然是更節省空間,好像也會讓人有越寫越多的衝動(?!)


上一篇
現代網站框架重要元素整理
下一篇
Phoenix起步走:建立一個購物網站--後台
系列文
新時代的網頁框架比較-- 淺談Rails、Django、Phoenix、Laravel31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0

「吾友阿貓」過了幾年變換角色了XD

我要留言

立即登入留言