V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yuhuan66666
V2EX  ›  程序员

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

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

    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   ·   实用小工具   ·   1249 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:10 · PVG 02:10 · LAX 10:10 · JFK 13:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.