iT邦幫忙

2026 iThome 鐵人賽

DAY 12
0
Software Development

當 AI 越來越會寫程式,開發者究竟還需要懂什麼系列 第 12 篇

Day12 - 看起來一樣的程式,就應該合併嗎

  • 分享至 

  • xImage
  •  

整理編輯頁時,很容易看到相似的程式:讀取資料、檢查欄位、寫入地址,再回傳結果。AI可以協助找出重複,也能提出抽成共用方法的建議。

但決定合併之前,還要問一件事:其中一個功能的規則改變時,另一個是否也應該跟著改?今天想聊聊的是責任邊界與耦合。共用程式會讓功能產生連動,我們需要判斷這個連動是否合理。

看起來相似的更新流程,要不要共用?

假設客戶資料裡保存了一組常用收件資訊,包含姓名、電話與地址。建立出貨單時,系統會把這些資訊複製到出貨單,作為這次配送的收件資料。之後修改常用資料,不會自動改動已建立的出貨單。

因此,系統有兩個編輯功能:一個修改客戶的常用收件資訊,另一個修改某張待出貨單的收件資訊。兩邊的程式都會檢查必填欄位、驗證電話格式,再把姓名、電話與地址存回去。看到這些相似的步驟,很容易想把它們合併成一個共用方法。

但兩個功能允許修改的條件不同。客戶可以更新常用地址,供之後建立出貨單使用;某張出貨單的地址能不能修改,則要確認它是否已經交付物流。修改這次配送的地址,也不代表要更新客戶的常用地址。

所以,電話格式等一致的檢查可以考慮共用,但「能不能修改」與「修改哪一份資料」,仍要依各自的操作決定。判斷是否合併,要看這些步驟是否遵守同一份規則。

用一個合理的變更,檢查邊界

那麼出貨單修改地址時,要確認新地址是否在目前配送方式的服務範圍內。這條規則應該套用到所有儲存客戶常用地址的地方嗎?

不一定。可能允許保存尚未使用的地址,等建立出貨單時再檢查能否配送。這取決於已確認的業務規則,不能因為兩個功能呼叫同一個方法,就順便一起限制。

如果每次新增規則,都要往共用方法傳入「來自哪個畫面」「是否略過出貨檢查」之類的參數,就值得回頭看:這個方法是不是承擔了不同操作的責任?有條件分支不一定錯,但每個呼叫端都需要一套例外時,共用可能已經沒有讓規則更清楚。

共用可以只到真正一致的部分

兩個功能不共用整段流程,不代表所有程式都要各寫一份。如果電話格式、地址欄位的基本檢查確實遵循同一份定義,就可以共用這些檢查;是否允許修改、是否符合配送條件,則留在各自的操作裡。

畫面元件也是同樣道理。兩頁可以共用收件資訊的輸入元件,但由各自的頁面決定哪些欄位可編輯,以及呼叫哪個儲存操作。共用顯示與輸入,不必連業務流程一起綁住。

另一方面,若客服單筆修改與批次修改都在處理同一種出貨單地址變更,就應確認兩者都遵守相同的修改限制。這裡若各自複製規則,以後調整時就可能改A漏B。真正需要一致的規則,仍然值得集中維護。

所以取捨不只是重複幾行程式。分開會增加重複維護的成本,合併則會增加連動的範圍。應該承受相同規則變更的功能,才適合共用那份規則。

決定是否共用,要看規則是否應該一起改變。理解責任邊界,才能判斷AI提出的合併是在集中同一份規則,還是把不同流程綁在一起。


「這兩段差不多,我把它們合併了。」
「那邊有一個規則不一樣。」
「沒關係,加個參數判斷。」
「這邊也有一個例外。」
「再加一個。」
「所以現在呼叫要傳什麼?」
「true, false, true。」
「什麼意思?」
「等一下,我看一下原始碼。」
/images/emoticon/emoticon31.gif


上一篇
Day11 - 編輯頁的資料沒載齊,還能按儲存嗎
下一篇
Day13 - 資料模型,是我們對業務的理解
系列文
當 AI 越來越會寫程式,開發者究竟還需要懂什麼 共 17 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言