[討論] FSM狀態機程式架構是不是災難?

作者: IhateOGC (我討厭)   2022-07-02 00:42:00
吐泡一下
最近在維護一個交易老程式碼
就像是依照流程圖畫出來的狀態機實作
主狀態機有N個case
每個case又各自註冊可以重複的條件
FSM主要的狀態是有順序的
但是下面登記的function重覆性有87%
一個flag就可以解決的事情搞到變成很巨大的狀態機
有股想砍掉重練的衝動...但是只能自己驗證
QQ
作者: ybite (小犬/小B)   2022-07-02 01:05:00
我認為看設計 良好設計下可以迴避可能問題
作者: w180112 ([NOOB]我超RETARD我超廢 )   2022-07-02 01:44:00
設計問題…不要怪東怪西
作者: labbat (labbat)   2022-07-02 01:45:00
主管請你來是維護的,亂動手腳而不提出規格變更申請是找死
作者: Apache (阿帕契)   2022-07-02 01:47:00
不是 幾乎所有DP教材都會講到SM
作者: pot1234 (鍋子)   2022-07-02 06:16:00
87%像的程式碼沒有共用code,這不是fsm的問題吧
作者: k798976869 (kk)   2022-07-02 07:06:00
IC數位設計都是狀態機啊
作者: MacPerson (Gary)   2022-07-02 07:07:00
如果改狀態,大家都自己去異動flag就好,那才是真正的災難
作者: TWkobe (中華柯比)   2022-07-02 07:22:00
要看驗證還有主管同意
作者: wulouise (在線上!=在電腦前)   2022-07-02 07:23:00
fsm最好要有辦法auto gen流程圖,不然維護起來很痛苦,而且要是每個流程都在那邊改一堆singleton..算了
作者: milk830122 (SuperX)   2022-07-02 07:48:00
各有好處吧 設計模式看情況用 flag遇到大架構要改直接累死
作者: tofuflower (無)   2022-07-02 08:45:00
用 flag 也會有 flag 的雷如果每個 func 的業務邏輯是獨立的, code 有 87 %像也不是問題把看起來一樣的程式碼共用等於把所有業務邏輯耦合在一起,這更雷
作者: kkes0001 (kkes0308)   2022-07-02 09:41:00
怎麼看都覺得問題是實現架構的人
作者: smallcar801 (大叔帶妳看金魚)   2022-07-02 09:58:00
沒壞的東西不要修
作者: alongalone (沿著孤單的路)   2022-07-02 10:26:00
存在必有道理. 人的問題不要怪東西
作者: wulouise (在線上!=在電腦前)   2022-07-02 11:19:00
重複不表示他們可以同時被改
作者: NDark (溺於黑暗)   2022-07-02 11:25:00
大部分是. 原因很複雜不能歸咎於一處.最大的問題常發生在幾處:- (後續)需求就超出設計之初的範圍- 維護的人沒有照著狀態機的方式來撰寫邏輯邏輯分離得好就算switch也能運作得很好.狀態機有點像是緊錮圈.是頭要去適合圈.不是每個開發者/團隊都有受過足夠的訓練能用得好.
作者: airtsubasa (偽學姊)   2022-07-02 11:36:00
沒壞的東西不要修,但頻繁修改(例如一樣的邏輯要改n個地方,然後變數還不一樣) 那到底要不要修呢
作者: Odia (Odi)   2022-07-02 13:11:00
在沒有提出更好的設計前別說是災難
作者: s678131 (Mu)   2022-07-02 13:46:00
FSM明明是個好東西
作者: dnabossking (少狂)   2022-07-02 14:19:00
我接收過這種賺錢中程式碼,我直接翻寫掉了,我滿肯定不是狀態機的問題
作者: DrTech (竹科管理處網軍研發人員)   2022-07-02 14:59:00
標題是災難,看一個程式有問題,就說整個世界有問題。
作者: alan3100 (BOSS)   2022-07-02 15:25:00
差多了吧...感覺上是你不知道為何要用FSM邏輯規模大到覺得測試麻煩大概就可猜想你不應該改成flag
作者: wave1et (百分百殖利率)   2022-07-02 17:02:00
自己為是阿,你快搞懂後把狀態數合併吧
作者: easyman (oops)   2022-07-02 17:19:00
使用FSM 肯定不會太災難, 用flag 才災難
作者: chuegou (chuegou)   2022-07-02 17:45:00
聽你在屁 10幾個flag在那邊if else你連文件都寫不出來你是不是要說沒文件是災難
作者: lturtsamuel (港都都教授)   2022-07-02 19:48:00
誰叫你要用狀態來實作fsm,用class或variant不好嗎
作者: pttano (pttano)   2022-07-02 20:58:00
你才是災難,跟程式沒關係
作者: ichunlai (^_^)   2022-07-02 22:39:00
用flag才是災難
作者: viper9709 (阿達)   2022-07-02 23:54:00
三樓正解
作者: peter98 (新兵)   2022-07-03 00:38:00
這個還真不一定
作者: APTON (瑋瑋)   2022-07-03 00:54:00
有辦法提供sample code給大家討論嗎?不然也只是聽你抱怨而已
作者: molimoli   2022-07-03 01:00:00
怎麼感覺你比較雷
作者: Lipraxde (Lipraxde)   2022-07-03 08:31:00
不然有更好的寫法嗎?
作者: KanzakiHAria (神崎・H・アリア)   2022-07-03 11:58:00
笑死 自己不會改狀態機說那是災難
作者: za755188   2022-07-03 17:56:00
狀態機如果文件還在 不容易大災難至少很容易理解他裡面在幹嘛
作者: revorea (追尋安身之地)   2022-07-04 00:52:00
flag災難中的災難
作者: CaptainH (Cannon)   2022-07-04 08:07:00
沒有FSM的話就是一堆if-elseif 有比較簡單?
作者: bear1414 (story)   2022-07-04 11:08:00
FSM是有用的控制架構 會變成災難通常是用的人的問題另 砍掉重練可以 但test case涵蓋率要趨近99.9%以上尤其是邊界條件或很少出現的條件的test都要涵蓋
作者: notBeing (read and be read)   2022-07-04 13:00:00
先生出100% coverage 的test env再改阿XD
作者: freef1y3 ( )   2022-07-04 14:38:00
flag是災難 所以把flag每個組合都弄成state就不是災難了
作者: hongsiangfu   2022-07-05 12:08:00
擴展便利,修改便利,過度最佳化不一定是好事
作者: snaketsai (さいでんし)   2022-07-07 13:57:00
若真如你說,那應該有大量的狀態轉換可以縮減吧,離散數學基本概念

Links booklink

Contact Us: admin [ a t ] ucptt.com