2020/01 Cola Daily Build

01/06 專案上線與階段上線/切割

  • feature branch
    • dev feature branch merge 多個 feature branch
    • 折解為多個 feature branch, 將影響較小或新功能先行上線
    • 關鍵方法或啟用入口最後上線

這樣可以避免 code reivew 負擔太大
以及需要上線的程式碼過多問題

01/02 多平台時應該考慮資料有進、有出

開發多平台專案, 注意各平台需求一至性
e.g.

  • web 畫面可輸入使用者生日 年、月、日
  • android 僅可輸入使用者生日 年 :x:
  • 後端 資料庫需要使用者年、月、日

上述情況在 android 端就會出錯(如果使用者生日月、日為必填)
若不是必填就要考慮另兩個平台的使用者生日應該怎麼顯示 月份和日期

這大概就是~ 宏觀&經驗

01/03 class function public, private 定義問題

  • 可以 private 就不要 public
    • 押取 function, method 是基本, 但在開出 function 的時候, 可以 private 就不要任意開放他, 避免未來重構、修改時的相依性困擾
    • 多數設定為 private 的時候, 在重構、變更需求的時候, 看 code 掃 code 速度會快很多

開放封閉原則 Open-Closed Principle (OCP) 也有點關係

1 Like

我還不是很會用 private :thinking:

01/07 物件化的重要性

  • 定義泛型物件
    • e.g. 商品:
      原型商品 : title: string, quantity: int, price: int / float, 下面商品都 繼承 這個原型商品

      • 一般商品 : title: 可樂, quantity: 1, price: 30
      • 運費商品 : title: 總額未達 400 加收運費, quantity: 1, price: 80
      • 綁定送商品 : title: 買可樂送吸管, quantity: 1, price: 0
    • 上述三個商品總金額為 30+80+0 = 110

    • 未來要增品商品 meta 或 props 時可以直接修改 原型商品 , 其繼承者都可以受惠

      • e.g. 在 原型商品 新增 is_food = false (預設為 false)

      • 一般商品 : title: 可樂, quantity: 1, price: 30, is_food = true
        **增加並設定 is_food 為 true

      • 運費商品 : title: 總額未達 400 加收運費, quantity: 1, price: 80

      • 綁定送商品 : title: 買可樂送吸管, quantity: 1, price: 0
        **不設定 is_food, 預設為 false


  • 如果沒有物件化, 每個商品的 meta, props 很容易散落在程式各處, 而且各自有自己的型別、類型
    未來要新增設定, 需要改動非常多的程式碼

01/08

  • workaround 即技術債, 正確使用 submodule, 而 是用 shell script 搬動檔案
    或是一些奇怪的手法…
  • 程式裡的 todo 是否應該設定重要性?

01/09

PHP boolean 轉換

form 傳送值時, 若希望對像為 boolean

傳入值可能是 :

  • int: 0, 1
  • string: ‘0’, ‘1’
  • string: ‘true’, ‘false’

到了 php 這端接收值之後轉換為 bool

一般來說直覺會這麼做

$is_bool = (bool) $_POST['user_selected'];

// 或是

$is_bool = empty($_POST['user_selected']) ? false : true;

上面的方法在對像為 string: ‘false’ 時也會回傳 true

e.g.

$_POST['user_selected'] = 'false';

當然這樣的結果就是不是我們想要的

或是就需要寫更多的 code 去處理…

但… 我只是想要判斷傳入值是否為 bool true false 而已 :roll_eyes:

更加智能的 bool 轉換技巧

利用 PHP 原生函式 filter_var() 更聰明正確的轉換為 bool 值

ref. https://www.php.net/manual/en/function.filter-var.php

$is_bool = filter_var($_POST['user_selected'], FILTER_VALIDATE_BOOLEAN);

預設為 false

如果想要在沒有傳入值的時候預設為 false, 可以使用 PHP 7 的 Null coalescing operator

$is_bool = filter_var($_POST['user_selected'] ?? false, FILTER_VALIDATE_BOOLEAN);

ref.
https://www.php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op


devon think 的第一篇完整文章 :dizzy_face:

01/10

  • 完善的退路
    • unit test,
    • throw error
    • 錯誤回報

01/13

部署流程和開發環境可以看作是一個實體工作桌、環境
預先處理、整理好
在臨時遇到問題時, 比較方便解決、查找問題

減少你要花心思的雜事, 專注在問題點上

1 Like

01/14

  • 盡量使用 auto format 減少腦內判斷
  • code style 很重要, 但把心力放到邏輯和架構上. 而不是排版
1 Like

01/15

  • 正確的輸出也是一種進步, 記錄學習過程, 整理學習內容
  • 日記, instagram, TODO 也是廣義的量化

ref.
量化人生:監視自己的資料狂們

1 Like

01/16

  • 今天還了一整天的技術債, hardcode 一時爽, 一直 hardcode 一直爽 :confused:
  • controller 控制流程, 邏輯和判斷移出

01/17

  • 專案、需求進行時多數為 業務或老闆說明(需求方)

  • 但實際操作方常常被忽略進入這個會議、需求說明; 單方面在需求方霸王色霸氣要求下, 很容易讓開發走錯方向

  • 強烈建議, 會前、開發前和實際操作方再進行二次確認

  • e.g. 主管要求開發 折抵 功能, 需要注意到了, 會計、對帳問題, 但可能還需要處理報表或是其它既有 workaround 問題

01/20

  • 重覆動作, 抽出處理

    • e.g. git remote origin prune, 定期會執行; 包裝成 shell script 減少打字
  • 經常性 git rebase, 也許可以包裝成 jenkins 自動處理

讓重覆的事, 自動化

01/21

  • 強調 需求端與操作端想要的東西不同
  • 記錄 dev history 是良好習慣
  • 先暸解流程, 再動手 :frowning:

lowlight

e.g. 預購(集資)功能製作時, 未考慮庫存, 使用者下單、使用者退貨
造成重覆建立資料表, ERP 系統需要另外調整…

01/30

  • 雙因素激勵保健理論
  • 用 todo list 拆解工作, 回憶、回顧工作中斷點

ref.

1 Like

01/31

  • highlight error or exception, 查問題、找錯誤更方便
  • 流程、routine 日常工作務必寫成 SOP, 減少錯誤和人工、手工上的失誤
    當然能做成工具或是設定 jenkins 更好