学习 spring 中,dao 层使用 mybatis。目前把很多业务逻辑都写到 service 层。比如 save 一个对象到数据库前,需要对数据做大量的校验,而这些逻辑如果都写到 service 层会让 service 变的很臃肿。再比如对某个实体类需要拿他相关的一些类的数据,acoount.getMovie()之类,写在 service 层感觉也不太好。 除此之外,在 service 层写一些 private 方法(比如 saveABC ),然后在同一层调用也容易出现问题。
但是如果把这些方法写在 Model 层,则需要把 mybatis 的 mapper 注入到数据对象里面。感觉也很麻烦。
希望各位 java 大佬和 spring 大佬指导一下正确姿势,谢谢
     1 
                    
                    sununiq      2018-03-18 14:46:33 +08:00 
                    
                    参数校验直接在 controller 中做了,可以考虑使用 hibernate-validator,业务层的校验放到 service 里面 
                 | 
            
     2 
                    
                    Luckyray      2018-03-18 14:50:07 +08:00 via iPhone 
                    
                    同意楼上 
                 | 
            
     3 
                    
                    gravitybox      2018-03-18 16:42:41 +08:00 via Android 
                    
                    当时写的是,在 controller 和 service.impl 中可能都会有校验代码,在 service.impl 中,mappe 接口 使用自动注入,用起来挺方便的啊 
                 | 
            
     4 
                    
                    srx1982      2018-03-18 17:17:45 +08:00 
                    
                    
                 | 
            
     5 
                    
                    buliugu      2018-03-18 17:44:26 +08:00 
                    
                    参数校验可以用 AOP 做,同一类写在一个 validator 里,业务层的校验老实放在 service 
                 | 
            
     6 
                    
                    yidinghe      2018-03-18 18:22:52 +08:00 
                    
                    参数校验分两种。参数是否存在,格式是否正确,这是第一种校验;而比方我要删除某条记录,传了个 ID 参数,那么对应的记录是否存在,也可以看作是参数校验。这样的校验就不应该放到 Controller 里面了。 
                 | 
            
     7 
                    
                    guojxx      2018-03-18 18:59:48 +08:00 
                    
                    我司的做法是  校验或者其他操作都会在 controller 执行,常用的 dao 操作也封装成 service 和 impl,继承和实现这些 base 类就好了,就不用去写 crud 操作了,还有一块是涉及多表事务的,应该在业务类中的 service 另外写接口及对应的实现类做处理。 
                 | 
            
     8 
                    
                    bobuick      2018-03-18 19:16:29 +08:00    参数校验在 controller 做了 + 1 
                 | 
            
     9 
                    
                    koal      2018-03-18 21:44:29 +08:00 
                    
                    up! 对得起名字啊,control 控制,肯定对于数据的。service 是服务,即只做业务操作。各司其职不会乱套。丢个 baseController 和 baseService 是必须的。 
                 |