Enum 枚举,我用枚举方法消除掉了 if,但是也破坏了层级结构 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
yuhuan66666
V2EX    程序员

Enum 枚举,我用枚举方法消除掉了 if,但是也破坏了层级结构

  •  
  •   yuhuan66666 2018-10-24 13:40:10 +08:00 3466 次点击
    这是一个创建于 2630 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Enum 属于 model 层 ,业务代码数据 server 层, 为了消除一大段 if else 结构,我在 server 层建了个和 model 层相同的 Enum,并且定义了 abstract 方法,每个枚举逐一采用不同的实现的方式。

    当业务代码到这个 if 的时候,根据代码自带的枚举,执行枚举各自实现的方法。

    但是心里总感觉别扭 ,总觉得不伦不类的

    v 友们 有什么更好的办法么

    15 条回复    2018-10-24 16:00:32 +08:00
    xiaoxinshiwo
        1
    xiaoxinshiwo  
       2018-10-24 13:47:42 +08:00
    Enum 怎么属于 model 层呢?不是属于 core 或者 common 吗?所有层都能依赖的啊
    sutra
        2
    sutra  
       2018-10-24 14:01:38 +08:00
    策略模式?
    hrong
        3
    hrong  
       2018-10-24 14:06:04 +08:00 via Android
    java functional programming
    yuhuan66666
        4
    yuhuan66666  
    OP
       2018-10-24 14:10:29 +08:00
    @xiaoxinshiwo #1 一直都这么定的,业务相关的 Enum
    hrong
        5
    hrong  
       2018-10-24 14:17:35 +08:00 via Android
    或者 decision table。
    wr410
        6
    wr410  
       2018-10-24 14:48:34 +08:00
    Enum 不是应该配合 switch 的吗?
    yuhuan66666
        7
    yuhuan66666  
    OP
       2018-10-24 14:50:25 +08:00
    @sutra #2 有点太重了
    yuhuan66666
        8
    yuhuan66666  
    OP
       2018-10-24 14:51:59 +08:00
    @wr410 #6 不光是啊 ,彻底去掉那个 if 结构 switch 也是一大坨
    guojxx
        9
    guojxx  
       2018-10-24 14:53:15 +08:00
    职责链?
    alk062003
        10
    alk062003  
       2018-10-24 14:53:56 +08:00 via iPhone
    q
    xiaoxinshiwo
        11
    xiaoxinshiwo  
       2018-10-24 15:36:32 +08:00
    @yuhuan66666 #4 从来如此,便对么?鲁迅
    yuhuan66666
        12
    yuhuan66666  
    OP
       2018-10-24 15:51:52 +08:00
    @xiaoxinshiwo #11 业务场景不同,公共的定义在 common 项目专属的就放到了 model,之前 Enum 只是单纯的枚举作用,我算是第一个把业务逻辑和枚举搞一起的,没什么不可以的,就是让人感觉怪怪的,想来现在提倡的就是低耦合,我还是耦合到一起了

    我在 server 创建了一个 Enum 作为 model 里 Enum 的映射 来处理 逻辑 完全不知道应该放到什么路径下,service 里全是接口,impl 全是实现,暂时放在了 utils,感觉有点怪
    xiaoxinshiwo
        13
    xiaoxinshiwo  
       2018-10-24 15:54:16 +08:00
    @yuhuan66666 #12 所以你的 model 划分不合理啊,你也说没什么不可以,有觉得怪,所以还是安于现状吧
    zhix
        14
    zhix  
       2018-10-24 16:00:11 +08:00
    是有一点反模式的味道,建议使用抽象类 + 继承来实现基于多态的策略模式。使用枚举实现多态有一点强行绑定的感觉。
    pelloz
        15
    pelloz  
       2018-10-24 16:00:32 +08:00
    你在枚举里面不应该直接写实现的方法,应该只记录实现类的名字(string),这些类应该实现同一个接口,然后通过 applicationContext.getBean 或者反射来调用具体实现类
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5417 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 07:30 PVG 15:30 LAX 23:30 JFK 02:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86