[讨论] 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