推 CoNsTaR: 你這個這麼 procedure 的東西,如果是 business logic 就 10/30 08:41
→ CoNsTaR: 照著 business logic 的架構寫,例如如果 business logic 10/30 08:41
→ CoNsTaR: 在這邊就是每次都先確認是否做檢查,那你就照著它架構寫 10/30 08:41
→ CoNsTaR: ,每個檢查外面都包上 if else,不要做一些自以為聰明的" 10/30 08:41
→ CoNsTaR: 設計" 10/30 08:41
→ CoNsTaR: 如果 business logic 在這邊有做抽象,例如要檢查和不檢 10/30 08:41
→ CoNsTaR: 查被分成兩種不同的流程,在不同情況下使用,兩種流程有 10/30 08:41
→ CoNsTaR: 各自的名字,那就把兩種流程分成兩個函式,不要自以為寫 10/30 08:41
→ CoNsTaR: 成一個函式 reusing 很聰明 10/30 08:41
→ CoNsTaR: 如果這不是 business logic 而是你為了達成 business log 10/30 08:41
→ CoNsTaR: ic 而寫出來的演算法,那我只能說真的慘 10/30 08:41
→ saladim: 意思是說直接if-else嗎? 比起繼承我還比較可以接受 繼承 10/31 03:17
→ saladim: 太難model了 對了 這邊是簡化過的程式 實際上複雜許多 很 10/31 03:19
→ saladim: 多地方要考慮加 基本上是一個template+strategy pattern 10/31 03:20
→ saladim: 的組合 設定/caller無關的都拿掉了 不是單單一堆function 10/31 03:21
→ saladim: call..另外我的一個疑問就是 通常有個二選一的選項 但是 10/31 03:22
→ saladim: 要嘛做個抽象有點多餘(因為永遠不會有更多選項) 要嘛 無 10/31 03:24
→ saladim: 法用現有體系去model這個抽象 或是它本身就是一個獨立的 10/31 03:25
→ saladim: 不知道一般是怎麼處理 這個case, 因為流程固定了所以兩個 10/31 03:27
→ saladim: 是不行的......以上....大概補充說明一下..... 10/31 03:28
推 CoNsTaR: 你比較可以接受繼承的具體原因我沒看到? 10/31 11:07
→ CoNsTaR: 如果你對 if else 的 concern 只是像你內文說的"怕以後 10/31 11:07
→ CoNsTaR: 忘記加",那你可能要再想想,我不太能理解忘記做該做的工 10/31 11:07
→ CoNsTaR: 作是個什麼概念 10/31 11:07
→ CoNsTaR: 1. 你用 if else 不會影響未來制定 business logic 的人 10/31 11:07
→ CoNsTaR: 考慮到檢查/不檢查兩種情況 10/31 11:07
→ CoNsTaR: 2. 也不會影響未來寫 jira ticket 的時候的 description 10/31 11:07
→ CoNsTaR: 和 acceptance criteria 忘記這兩種情況 10/31 11:07
→ CoNsTaR: 3. 也不會影響原本該做的 code review 變成沒做 10/31 11:07
→ CoNsTaR: 4. 也不會影響 unit tests 忘記測 10/31 11:07
→ CoNsTaR: 5. 也不會影響 testers 的 test plan 忘記加這個測項 10/31 11:07
→ CoNsTaR: 完全看不出來怎麼會影響任何一個人忘記考慮檢查/不檢查 10/31 11:07
→ CoNsTaR: 兩種情況 10/31 11:07
→ CoNsTaR: 看你的內文和回覆感覺最大的問題是你在用寫通用函式庫的 10/31 11:07
→ CoNsTaR: 思維寫 user code,這樣寫出來的東西不覺得就像是用營造 10/31 11:07
→ CoNsTaR: 業 sop 蓋的疊疊樂一樣嗎 10/31 11:07
推 wulouise: 不懂你說的忘記加是什麼情況,多了cpmpute忘記補檢查? 10/31 12:32
→ wulouise: general就是所有compute都有check,只是chk可以noop 10/31 12:33
→ wulouise: 或所有compute跟check都當做callback執行,繼承沒有必要 10/31 12:35
→ wulouise: 如果對效能有需求,那看情況決定要不要generalize 10/31 12:36
→ wulouise: 重點是你的抽象化可以用在別的地方嗎?好debug嗎? 10/31 12:38
推 Dracarys: 改用rust的operator? 11/01 09:06
→ saladim: 繼承對我的順位會在第二或更之後 怕忘了加是有了這logic 11/02 03:14
→ saladim: 在 若是要改or加新的處理(不是其他bussiness logic變動) 11/02 03:15
→ saladim: 在做check的時候 可能會忘記有這條 實際的東西還蠻多的若 11/02 03:16
→ saladim: 不是用同一個util(不管是func or class) 會有機會漏掉 11/02 03:18
→ saladim: 當然1~5也有道理 其他大大建議我也會一併想一想 其實不到 11/02 03:21
→ saladim: 寫通用函式庫 當會很多東西常出現 但組合他們的邏輯變動 11/02 03:22
→ saladim: 很快(bussiness logic/requests...) 一定會有一個自己的" 11/02 03:23
→ saladim: 好用函式庫/engine庫" XD 才能改得快 重複使用"解" 11/02 03:25
推 bizer: 最個macro取代不就好了?搞這麼複雜? 11/04 10:30
推 LPH66: 我會認為這個「選項」應該要是 business logic 的一部份 11/04 12:29
→ LPH66: 是的話其實也沒什麼「忘了」的問題, 因為那就是沒實作完全 11/04 12:30
→ LPH66: 如果未來要加其他開關的話應該要以等同改變 business logic 11/04 12:31
→ LPH66: 的型式去處理, 而不只是加一個開關調整這種事 11/04 12:31
→ LPH66: 講更簡單一點就是, 加開關應該要以等同於改流程的程度對待 11/04 12:36
→ LPH66: (實際上真的在改流程, 新增某條件之下某流程可跳過的邏輯) 11/04 12:36
→ LPH66: 未來不管是加別的開關或是流程調整都要順過整個流程才實作 11/04 12:37
→ LPH66: 這樣這些開關是流程的一部份, 就不會有什麼「忘記」的問題 11/04 12:38
推 a731977: DP, chain of responsibility 參考看看,對於流程控管非 11/06 03:30
→ a731977: 常好用 11/06 03:30
推 AiriMania: 樓下板橋知名ID Elio2021 12/02 13:43