l523115401
寒风逝流
采纳率50%
2018-07-11 12:58

关于代码编写规范的疑问,spring mvc 控制层一段代码被多次复制重用,如何设计优化

5

业务逻辑大概如下:
功能:用户留咨保存功能
视图层:留咨界面,用户填写信息
控制层:校验数据合法,并依据request从cookies中取出用户城市站、usertraceId等信息,根据request请求头判断设备类型。最终封装实体调用入库接口。
服务层:验重、保存数据。
问题:
控制层做入参校验理所当然,没有问题。现在问题来了,此控制器承载多方留咨请求,,绝大部分业留咨务都可以直接请求,变化来了,在另一种业务条件下,如领优惠券,产品提了需求,要求用户领券成功之后在再调用用户留咨接口。我初始想在领券控制器中判断,成功后直接调用用户留咨控制器,避免一系列参数校验逻辑再写一遍,也不用再重写从request里面获取cookies等方法。但是考虑到mvc的设计,不应该控制层调取控制层(redirect除外)但是不调用,着一系列的逻辑我又要重写一份。又想到把校验逻辑和取cookies和设备信息放到service层,但是需要操作request,request是控制层操作的,如果把request带到服务端,那样也破坏了编码规范,至少这个服务类方法的test ng你都很难跑。不能new一个request对象吧。
所以不知道如何设计才好?难道我还是要把校验等代码复制一份?求探讨指教

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • bayuemu bayuemu 3年前

    验证的事情交给拦截器去做

    点赞 评论 复制链接分享
  • javacaprain 爱编程的小猫 3年前

    有几个办法:
    1、如果Service层不想让request对象作为参数传入,可以在Controller层将request对象的参数放到ThreadLocal中,可以线程安全地传入Service层。
    2、也可以采用创建工厂设计模式,动态地去获取对应的Service
    3、也可以跳出MVC的范畴,往微服务靠一靠。比如说把现有的业务拆分成上下游两个服务,第一层服务是Controller,第二层服务是Service,两层服务间的调用。

    点赞 1 评论 复制链接分享
  • qq_42214807 qq_42214807 3年前

    封装类 对其实例化或在放入配置文件中

    点赞 评论 复制链接分享