【專訪】高爾夫球隊:虛擬球隊經理
編輯: Davina
熱愛運動的你有屬於自己的球隊嗎?如果參加球隊卻沒有一套方便記錄的系統追蹤個人與球隊的成績,那麼就很難檢討和優化。Andy 是一位退休的資深軟體工程師,為了讓自己和夥伴們在大草原運動時,不必攜帶厚重的筆電登打成績,因此選擇 Flutter 開發 Android/iOS 的 App,讓每一位夥伴都可以透過手機上的簡單操作,即時記錄個人成績,並且統整成球隊的成績,以此和夥伴們一起尋求成長的道路。
讓我們一起來看看 Andy 利用 Flutter 替他的團隊做了什麼,並且為什麼選擇使用 Flutter 吧!
高爾夫球隊
Q1. 什麼樣的契機讓你想開發一個 App 來記錄你們球隊的成績?它可以做些什麼事呢?
我的高爾夫球隊需要一個能處理球隊會務的電腦系統,包括記錄球隊活動、產生報表,但是市面上沒有適合的系統。當然這些數據、報表可以透過 Excel 來完成,可是就會產生很多檔案、變得很雜亂,而且 Excel 並不適合使用手機操作。帶著筆電到球場、開機、操作滑鼠…這些都是很麻煩的事情,如果能透過手機點一點按一按就完成操作,那會是一件很方便的事。
開發這個系統並不是只有我們的球隊可以使用,有興趣的高爾夫球隊都可以用這個 App 來管理自己的球隊,畢竟我想大家都有一樣的困擾。我也想過有些人可能是沒有球隊的,所以如果是個人也一樣可以用這個 App 來建立球敘、紀錄成績、產生統計報告。差別只是在球隊的專屬功能可否使用而已。
另外我也有用 Flutter Web 開發人機介面 WebApi 服務。總幹事在透過 App 建立投票或團購等活動後,系統會自動發送簡訊連結給其他沒有使用 App 的會員。由於每個連結都有獨立識別碼,因此會員投票或填寫訂購單時,無需填寫個人資訊。連結的表單採用 Flutter Web 撰寫,會員填寫完成之後,即會將資訊回傳伺服器。總幹事可以直接在 App 上檢示表單統計的結果。
除了 WebApi 之外,總幹事也可以建立例賽備忘錄,裡面列出例賽時間地點、交通地圖、球車分組、用餐地圖等資訊,將超連結貼到 Line 群組,群組裡的人直接點擊超連結就能叫出 Flutter Web 畫面查閱。
Q2. 有些人會擔心把資料放在 App,將來換手機或各種原因會導致資料遺失。這個 App 有什麼備份機制呢?
用戶一開始必須註冊自己的帳號密碼,系統會產生一個識別碼,儲存在本機資料庫,接下來所有操作產生的資料,都是儲存在雲端資料庫裡。所以當用戶更換手機,或是另外也使用平板,甚至桌上型電腦,只要安裝 App 後輸入同一組帳號密碼,就能恢復原來的使用環境。本機資料庫裡,除了識別碼外,還會有下場比賽的成績相關資料,因為下場打球時,在高爾夫球場上不見得隨時都能連上網路,所以會先將比賽成績的資料先儲存在本機資料庫,等到有網路的時候再上傳到雲端資料庫。
Q3. 為什麼決定採用 Flutter 技術來開發?在決定使用 Flutter 技術時有什麼擔憂嗎?
剛開始我是用 Android 寫了一個版本,但是球隊裡有一半的人是用 iPhone,所以開始研究跨系統的開發環境。大概花了一個月的時間來評估 Flutter 這項技術。我有多年開發 WinCE 與 Android 的經驗,由此判斷 Flutter 是一套很先進而且很有未來性的工具。當然跨平台是一個主要考量,不過在我深入研究半年之後,確信 Flutter 是一套非常有企圖心,且非常符合企業 M 化的先進工具。而且它是 Google 主推的工具,相信有足夠的研發實力及財力,能確保後續穩健的發展。
當然它目前還是一個很新的技術,版本變更速度快,因此也產生一些隱憂。在 Flutter 編譯的環境,整合了太多外部資源,隨著版本演進,相容性以及適用性會難以掌握。另外第三方套件的部份,安全性也比較沒有保障。
Q4. 目前採用的系統架構是什麼樣子呢?
基本上現在的軟體架構都是 MVC 概念,然後透過 API 串接 Web Service。我的 Web Service 是用 C# 寫的,主要分成四種服務:
(1) Data Service:接收 Sql command 字串,回傳 JSon DataSet。
(2) Data Access:接收 New,Chg,Del 封包,邏輯檢查、讀寫 Table,回傳 JSon 結果。
(3) Business Method:接受 Method 封包,邏輯檢查、資料維護,回傳 JSon 結果。
(4) Business Report:接受 Report 封包,產生圖表、回傳圖表。
Q5. 可以和我們介紹一下研究與開發 Flutter 的過程,以及花了多少時間進行開發嗎?
我開發過很多系統,例如製造業、零售業、倉儲業、以及公家機關的專案;待過多家上市公司,也待過系統整合公司;或是教別人作系統分析、專案管理。所以我很清楚一個資訊系統的架構,也清楚一個資訊系統的軟體工程。研究一套新的工具,就是看一下技術文件,把環境裝起來,測試寫幾個程式,我就知道好不好用、能不能用。再到網路搜一搜就知道有那些資源與規模,憑直覺就知道能作那些事。
高爾夫球隊是我第一個用 Flutter 開發的 App,實驗目的為主,所以過程中有反覆重寫,才能瞭解 Flutter 的能耐。大概花了 6 個月,其中有 2 個月都在解決 Mac 上的問題。如果以現在熟悉開發環境的情況再重寫這個 App,應該 2 個月左右。
Q6. 以您的經驗來說,Flutter 和其它的開發經驗有何不同?覺得有什麼優缺點,或遇到那些困難?
以前用 Android 寫過 App,感覺有點低階,要寫較複雜的功能,要深入研究它的原理。Flutter 相對很容易寫出複雜且生動的畫面,尤其有很豐富的套件可以使用。Flutter 的程式流程也很容易理解,相對算是很高階的語言,很好用。我認為他的優點有幾個:
(1) 很有彈性的畫面 Widget 結構,這個非常優秀,能作出很豐富的畫面。
(2) 同一套程式碼能編譯 Android、iOS,甚至 Web,且操作手勢都一樣。
(3) 套件資源很豐富,很容易滿足程式需求。
至於缺點,我想開發環境的視覺化畫面可以再加強,雖然有熱編譯的功能,但當程式報錯時,就很不好使。另外以前寫程式基本上都是同步(先後順序,逐列執行),如果需要非同步才特別寫,邏輯很清楚。但是 Flutter 到處都是非同步,反而一定要同步(先後順序,逐列執行)時,必須增加很多函數,邏輯上不是很明確。
過去比較熟悉 Window 的開發與生態,比較多的困難是從這裡產生的。例如對 Mac 不熟,要在 Mac 上產生 App 上架,如闖叢林。然後當 App 編譯發生錯誤時,很難 Debug,感覺開源的開發環境很複雜。當 App 持續增加修改功能、上架及審查,用戶版本更新是一個痛苦循環。最後還有一點是,當 App 大到 64K,才發現 App 是不能無限放大的。
Q7. 你們會推薦什麼樣的 APP 使用 Flutter?有什麼樣的建議想給大家嗎?
我是一個已經退休的資訊人員,作了 5 年的程式設計師,7 年的系統分析師,7 年的專案經理,7 年的資訊主管。我整個資訊生涯都在開發企業應用的 ERP 系統,在職時曾經力推企業 M 化,就是透過行動裝置連上網路處理公司事務。從目前產業現況看起來,好像上面的情境都已經實現了,但實際上是同一個系統被分別用不同技術、不同平台作整合。例如一個訂單系統,在公司內部用 VB 寫給業務部門的開立訂購單,然後用 HTML5 寫手機網頁給主管能用手機簽核,再用 ASP.NET 寫 PC 網頁版給客戶簽認,再傳郵件超連結讓供應商開啟 Web Api 備貨數量時程確認。
我覺得產業界最大的問題就是,系統隨著企業成長,產業升級,資訊系統也必須快速調整,但一個企業養不起能負擔多種技術,多個平台的資訊人員,所以必須委外開發維護,但委外除了成本考量外,委外的團隊經常因為人事變動,技術變遷,配合度出問題後,企業的系統就面臨無法滿足用戶需求,企業的資訊人員也因為技術差異而坐困愁城。過去 Android 跟 iOS 兩套系統必須由不同團隊開發,版本混亂以外,企業型 App 經常更新版本,造成用戶安裝上的困擾,有時還會因為版本不一,造成後端資料庫誤植。因此我很樂見 Flutter 跨平台整合,可以解決一些的問題,我會建議用 Flutter 發展企業用 App,原因如下:
(1) 企業用 App,程式量很龐大,程式新增修改很頻繁,純 App 並不洽當,應該是將 App 當成是一個入口平台,然後將 ERP 的程式用 Flutter Web 呈現。
(2) 需要使用到硬體資源的部份例如照相、錄影、錄音、經緯度等寫在 App。
(3) 讓 App 不會經常修改,不會造成用戶頻繁更新。
(4) Web 可隨時新增修改,不會有版本不一致問題。
感謝 Andy Cheng 程福堂 分享精彩的經驗給我們,不知道大家對於那個部份覺得有收獲呢?歡迎留言告訴我們喔😘
文章都看了,手拍了嗎?
還沒拍呀?!拍手鼓勵支持,小編們才用動力繼續寫下去哦!此計畫也才得以繼續哦!以上文章感謝 Andy Cheng 程福堂 熱情參與 Flutter Taipei「App 蒐集企劃」,也謝謝你讀完這篇文章!希望這篇文章和此企劃讓你更了解 Flutter 在商業化產品上的應用與導入。歡迎隨時加入 Flutter Taipei 臉書社團與大家一起互動,告訴我們更多你的想法!如果你也有興趣參與「App 蒐集企劃」聊聊你們團隊/獨立開發者如何開發 Flutter App,想跟大家分享用到了怎麼樣的相關技術,歡迎直接填寫表單,我們將會與你聯絡!