业务逻辑该放在哪? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
heian0224
V2EX    Java

业务逻辑该放在哪?

  •  
  •   heian0224 2016-01-27 23:24:28 +08:00 5191 次点击
    这是一个创建于 3556 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天工作时做一个对外的 ejb 接口,我把业务逻辑放在 service 层,然后别人告诉我别这样写,要写在 plsql 里,写一个存储过程里面写业务逻辑.是这样吗? Action , Service , DAO 这三层之所以划分,不就是为了解耦业务逻辑, action 只负责分发 service , service 负责逻辑, dao 负责处理传过来的数据然后取数据。
    把业务逻辑写在 plsql 有更好吗??是我的理解有问题吗?

    13 条回复    2016-01-28 15:07:28 +08:00
    asj
        1
    asj  
       2016-01-28 05:41:50 +08:00 via Android
    目测这个别人超过 40 岁了
    heian0224
        2
    heian0224  
    OP
       2016-01-28 08:07:15 +08:00 via Android
    @asj 可惜猜错了,这个别人就比我大几岁
    jsrgqinbin
        3
    jsrgqinbin  
       2016-01-28 08:58:28 +08:00
    是不是电信类项目里出来的?
    ArthurKing
        4
    ArthurKing  
       2016-01-28 09:21:46 +08:00
    根据实际情况决定吧。现在的项目要处理大量数据,也会生成大量数据。业务逻辑中的数据处理部分放在存储过程里,数据只在数据库层面流动,减少了很多数据库与应用间的数据交换。而且运维方便,也方便数据库开发人员查找问题。
    weizhiyao008
        5
    weizhiyao008  
       2016-01-28 09:55:00 +08:00
    我也很喜欢把业务放到存储过程里面,但是也得分情况啊,并不是所有的都必须放到存储过程里面的,需要大量计算的,我就不放到存储过程里面
    xiamingchong
        6
    xiamingchong  
       2016-01-28 10:02:21 +08:00
    别听他的
    chengcanmm77
        7
    chengcanmm77  
       2016-01-28 10:31:10 +08:00
    这要是访问量大的话,数据库不会挂调?。。。
    domty
        8
    domty  
       2016-01-28 11:37:07 +08:00
    看别人的代码是怎么写的
    一般来说他告诉你这么写就是说这么写可能就是项目的开发标准

    项目代码最忌讳一个人一个风格 你把业务写 service 他把业务写成存储过程 维护和修改起来是很麻烦的
    heian0224
        9
    heian0224  
    OP
       2016-01-28 11:44:09 +08:00 via Android
    @chengcanmm77 访问量不会大,而且数据库挂掉也就是加钱加机器的事。

    @ArthurKing 减少数据库与应用交互这个可以理解,但这样做不符合分层的意义了,我直接取 dao 不就可以了,反正业务逻辑在 sql 中
    ArthurKing
        10
    ArthurKing  
       2016-01-28 13:55:47 +08:00
    @heian0224 根据项目实际情况来吧。不能死板的迎合分层的理念而去分层。在一些大数据量、业务逻辑复杂,且测试环境很难去模拟生产环境的项目中,你会发现把业务逻辑写在存储过程里还是很有必要的。
    wupher
        11
    wupher  
       2016-01-28 14:20:14 +08:00   1
    之前在做运营商系统中见过这种做法的。
    个人不喜欢这样,还是喜欢在 Java 代码中放入业务逻辑。好测试( TestCase ),易于重构与复用,也方便并发计算,换数据库(这事很少见,但是也碰到过)不至于当场晕倒。

    这种做法,虽然不认同,但是也能理解。有错误或者业务调整易于修复或改写;不需要重新部署。

    比较中立一点得说,看个人喜好了。确实有的同事对于 Java 语言实在无爱,就喜欢搞 Oracle ,啥都写存储过程的。
    heian0224
        12
    heian0224  
    OP
       2016-01-28 14:57:42 +08:00 via Android
    @ArthurKing 业务逻辑复杂写在存储过程可以理解,比如说一些跑批。但是有些业务就是查一点数据,两个 select 的事,就是迎合别的系统做的东西,基本不会公用,那我何必又放在存储过程?
    ArthurKing
        13
    ArthurKing  
       2016-01-28 15:07:28 +08:00
    @heian0224 强调了两次,按项目实际情况来。一般项目都可以逻辑放 service , dao 执行的只是简单的增删改查。但是有些项目就得根据实际情况选择适合的方式,而不是死板套模式
    关于     帮助文档   /span>   自助推广系统     博客     API     FAQ     Solana     4413 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 582ms UTC 01:03 PVG 09:03 LAX 18:03 JFK 21:03
    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