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

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

0

3个回答

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

0
xiao_nini
圆圆 uuu
8 个月之前 回复
qq_40959736
qq_40959736 验证的事情交给拦截器去做
8 个月之前 回复
l523115401
寒风逝流 想到了,在这个业务里使用不太适合。这个领券控制器是有逻辑的,只有在特定渠道调用的领券才会留咨,拦截器把领券请求也加上是不是显的不太合理呢,毕竟大部分领券是不需要留咨的。当然这只是一种情况
8 个月之前 回复
cangketie
cangketie 你好酷啊,都玩这个了
8 个月之前 回复
l523115401
寒风逝流 我想过用拦截器,方法可行,可是拦截器处理这种逻辑感觉怪怪的
8 个月之前 回复

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

1

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

0
l523115401
寒风逝流 封装类?不太明白,这是要从request取数据的,封装类里把数据写进去?
8 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
MVC引入SERVICE层 提高代码重用性 沟通CONTROL和MODEL
MVC是web开发中常见的程序结构。 简单的mvc结构如下: view层:显示层。  control层:业务层,集合了各种action。  model层:模型层,一般和数据打交道。简单的sample:一个表对应一个model类。 其中control层调用model层的方法,实现对数据的访问。  采用这样的结构在一定程度上,可以做到代码清晰,较容易扩展
MVC中三层规范写法示例
经常会在web项目中用到MVC模式的写法C:控制层Controller,负责对请求的url分发到不同的网址,处理请求的入口。 M:规范数据数据成Bean,并负责调用数据库 V:只负责从数据库获取数据,并显示。此三层的设计充分得将数据显示与数据操作很好的分离开了,是一种极佳的面向对象的设计思路。下面把常见的MVC模式的规范写法总结如下:model:public class Question {
规范你的代码编写风格
笔者寄语:一份编写规范的代码会让人赏心悦目,养成良好的代码编写习惯是每一个程序员应该具备的基本素养!1、基本规则【规则1-1】标识符应当直观且可以拼读,可望文知意,不必进行“解码”。例如:标识符最好采用英文单词或其组合,便于记忆和阅读。切忌使用汉语拼音来命名。程序中的英文单词一般不会太复杂,用词应当准确。例如不要把CurrentValue写成NowValue。【规则1-2】标识符的长度应当符合“m...
SpringMVC的Contrller控制器层的三种写法
MVC框架是什么 模型-视图-控制器(MVC)是一个众所周知的以设计界面应用程序为基础的设计模式。它主要通过分离模型、视图及控制器在应用程序中的角色将业务逻辑从界面中解耦。通常,模型负责封装应用程序数据在视图层展示。视图仅仅只是展示这些数据,不包含任何业务逻辑。控制器负责接收来自用户的请求,并调用后台服务(manager或者dao)来处理业务逻辑。处理后,后台业务层可能会返回了一些数据在视图层展
Spring 4MVC在控制层传回JSON字符串
直接上代码: 控制层: package package1; import java.util.ArrayList; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframew
SpringMVC 控制层类的三种写法
第一种: @Controller //注解 public class TestController extends AbstractController{ @Override @RequestMapping("/index") //注解:路径名 protected ModelAndView handleRequestInternal(HttpServletRequest requ
菜鸟学习Spring——SpringMVC注解版控制层重定向到控制层
一、概述。        SpringMVC中界面请求Contorller1,Contorller1需要重定向到Contorller2中显示其他页面或者做一些业务逻辑,Spring中提供了这个功能利用“redirect:/”来进行重定向。 二、代码演示。 1、界面 Login.jsp <%@ page language="java" contentType="text/h
Java代码编写规范(不是标准规范,自行整理,无须纠结)
最近回过头来给以前的项目增加功能,发现之前写的注释非常不全,代码也非常的不整洁,有些地方写的‘’窝七八烂的,看着很不舒服;又恰好经理最近也经常跟我提起代码规范,我们就讨论了一下代码规范的重要性和必要性,于是决定我们也要制定个规范,这样利于团队开发,统一代码风格,写出来的代码也不会风格迥异; 最近几天有空就跟其他公司的盆友聊起这件事,越发觉得代码规范的必要性,于是根据其他公司盆友以及自己整理的一些
Spring MVC学习总结(17)——SpringMVC之接口规范与Controller规范
一、关于Spring接口定义要注意以下常见的几种问题 1. 返回格式不统一 同一个接口,有时候返回数组,有时候返回单个;成功的时候返回对象,失败的时候返回错误信息字符串。工作中有个系统集成就是这样定义的接口,真是辣眼睛。这个对应代码上,返回的类型是map,json,object,都是不应该的。实际工作中,我们会定义一个统一的格式,就是ResultBean,分页的有另外一个PageResultB
Spring MVC 之 调用复用
如果大家看过Spring MVC的源代码都会知道.Spring MVC框架在Spring容器初始化的时候,通过@RequestMapping建立起请求路径与调用方法的映射(没有看过源码的同学应该也能够想明白)。
MVC设计模式针对业务层和控制层代码分离的看法。
对于业务逻辑代码放在业务层,对于应用逻辑代码放在控制层 对于什么是业务逻辑,什么是应用程序逻辑: 示例: 用户点击商品的“添加到购物车”按钮,引起一次请求。服务器开始处理该请求,过程: 1、检查当前用户是否有权限(比如是否已经登录、用户帐户状态、是否可以购物等) 2、检查要添加的商品ID是否有效、 3、检查要添加的商品库存是否足够 4、将商品加入购物车,并保存购物车状态 5、反馈信
书写简洁规范的代码
写出简洁规范的代码对于开发者而言非常重要,它体现了开发者自己的专业性和技术水平,而且能够赢得别人的赞赏。对团队来说,团队成员遵循统一的代码规范,能够更好地维护代码库的稳定和谐。 Android是基于Java语言进行开发的,因此说到编码规范,首先需要遵循Java的编码规范。 - 1 Java编码规范1.1 源代码文件的定义源代码文件以文件内容中的最顶层的Java类命名,而且大小写敏感,文件扩展名为 .
学习SpringMVC中优秀的代码编写风格
在org.springframework.web.servlet.FrameworkServlet 中有下面这段代码 private class ContextRefreshListener implements ApplicationListener<ContextRefreshedEvent> { @Override public void onApplic
Spring MVC 控制层处理各种参数
package com.bob.analyst.admin.controller;import java.util.List;import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.Path
(精)分包原则/包的设计原则/组件(包)设计原则
组件,或者叫程序集,是指一种能够被独立部署的二进制单元,一般是以DLL的形式存在的。针对大型的软件系统,良好的组件设计能够把系统分解为一些小的组件,从而使每个开发团队都可以只关注单个的组件而无需关心整个系统。组件设计需要遵守如下原则: 重用-发布等价原则(REP)即重用粒度就是发布粒度。一个组件中的类要么都是可以重用的,要么就都不可以重用。 共同重用原则(CRP)一个组件中的所有类应该是共同重用的
C#代码规范 常用的代码编写规则
C# 代码规范中列举了c#编程中所涉及的所以代码编写规范 第一章 概述 4 规范制定原则 4 术语定义 4 Pascal 大小写 4 Camel 大小写 4 文件命名组织 4 1.3.1文件命名 4 1.3.2文件注释 4 第二章 代码外观 6 2.1 列宽 6 2.2 换行 6 2.3 缩进 6 2.4 空行 6 2.5 空格 6 2.6 括号 - () 7 2.7 花括号 - {} 7 第三章 程序注释 9 3.4 注释概述 9 3.2 文档型注释 9 3.3 类C注释 10 3.4 单行注释 10 3.5 注释标签 10 第四章 申明 14 4.1 每行声明数 14 4.2 初始化 14 4.3 位置 14 4.4 类和接口的声明 15 4.5 字段的声明 15 第五章 命名规范 16 5.1 命名概述 16 5.2 大小写规则 16 5.3 缩写 17 5.4 命名空间 17 5.5 类 18 5.6 接口 18 5.7 属性 (ATTRIBUTE) 19 5.8 枚举 (ENUM) 19 5.9 参数 19 5.10 方法 20 5.11 属性 (PROPERTY) 20 5.12 事件 21 5.13 常量 (CONST) 22 5.14 字段 23 5.15 静态字段 23 5.16 集合 24 5.17 措词 24 第六章 语句 26 6.1 每行一个语句 26 6.2 复合语句 26 6.3 RETURN 语句 26 6.4 IF、 IF-ELSE、IF ELSE-IF 语句 26 6.4 FOR、FOREACH 语句 27 6.5 WHILE 语句 27 6.7. DO - WHILE 语句 28 6.8. SWITCH - CASE 语句 28 6.9. TRY - CATCH 语句 28 6.10. USING 块语句 29 6.11. GOTO 语句 29 第七章 控件命名规则 30 7.1 命名方法 30 7.2 主要控件名简写对照表 30 第八章 其他 30 8.1 表达式 30 8.2 类型转换 30 附录一: 匈牙利命名法 31
spring之间的各层调用
spring配置文件applicationContext.xml就是spring容器, class里面的类被ioc容器拿去创建对象,id是bean的识别节点 在service层里面注入dao层,因为service层要调用dao的方法,创建的对象传给userDao(userDao为在serviceImpl里面声明的对象)
spring mvc防重复提交(第二种 自定义注解 以及 注解的实现 和 运用注解)
转载至 :http://blog.csdn.net/u013378306/article/details/52944780 第一种方法:判断session中保存的token比较麻烦,每次在提交表单时都必须传入上次的token。而且当一个页面使用ajax时,多个表单提交就会有问题。注解Token代码: [java] view plain copy print?package com.thinkgem.
springMVC——匹配URL路径执行指定控制层
springMVC中可以将指定URL模式地址肯指定访问Controller的路径进行关联与匹配,如果某一个访问Controller控制层的UTL与该URL模式进行匹配,则调用匹配的Controller控制层 controller中的url路径如下,访问时我们只需匹配格式就能完成访问 @RequestMapping(&quot;/hello/{userId}&quot;) @PathVariable 或者 @Pa...
Spring MVC后台控制层获取参数方式详解
Spring MVC的controller层获取jsp页面参数方式有两种,一种为使用@RequestParam,一种为使用request.getParameter(”param”)来获取 具体使用方法如下所示:基本使用 @RequestParam Html代码:<form action="/testRequestParam" method="post"> <input type=
spring mvc:业务层事务管理
<br />这里将用到以下几个包:引用<br />aopalliance-1.0.jar <br />commons-collections.jar <br />commons-dbcp.jar <br />commons-logging-1.1.1.jar <br />commons-pool.jar <br />jstl.jar <br />log4j-1.2.15.jar <br />mysql-connector-java-5.1.6-bin.jar <br />spring-aop-2.5.6.j
MVC各层的典型实现
模型层Model的典型实现 功能 模型层的典型代码模式 控制器调用模型层获取数据的典型做法 基础模型类 实现模型类的单例模型工厂 整个模型层的类库结构图 控制器层Controller的典型实现 控制器的作用 控制器类的常规做法 控制器的划分 控制器的动作 基础控制器类 视图层View的典型实现 功能 数据分类
谈代码耦合—知乎回答(转)
写在前面:耦合,谁之错?业务耦合,架构耦合,代码耦合,依次产生,前者是后者的催化剂,最终结果是系统严重耦合,无法适应任何变化。本篇来源:https://www.zhihu.com/question/21386172?sort=created以前,我写代码时,我考虑模块(本文中的模块就是指单个源文件)的单向依赖关系,考虑接口的正交性和紧凑性。我觉得我在做低耦合的好设计。 然而,我发现其他程序员写的代
Web入门——HTML代码编写规范
本文总结了30条html代码编写指南,只要在编写HTML代码的过程中牢记它们,灵活运用,你一定会写出一手漂亮的代码,早日迈入专业开发者的行列。 1、一定要闭合HTML标签 在以往的页面源代码里,经常看到这样的语句: Some text here. Some new text here. You get the idea.也许过去我们可以容忍这样的非闭合HTML标签,但在今天的标准来看
verilog 代码编写 ,FPGA设计规范
工作过的朋友肯定知道,公司里是很强调规范的,特别是对于大的设计(无论软件还是硬件),不按照规范走几乎是不可实现的。逻辑设计也是这样:如果不按规范做的话,过一个月后调试时发现有错,回头再看自己写的代码,估计很多信号功能都忘了,更不要说检错了;如果一个项目做了一半一个人走了,接班的估计得从头开始设计;如果需要在原来的版本基础上增加新功能,很可能也得从头来过,很难做到设计的可重用性。在逻辑方面,我觉得比...
dao层和service层的重用
如下dao层的重用: baseDao public interface BaseDao { public void saveEntity(T bean); public void updateEntity(T bean); public void deleteEntity(Serializable id); public Collection getAllEntity();
Spring的学习--SpringMVC的四个基本注解annotation(控制层,业务层,持久层)
SpringMVC中四个基本注解: @Component、@Repository、@Srevice、@Controller  看字面含义,很容易却别出其中三个: @Controller  控制层,就是我们的action层 @Service     业务逻辑层,就是我们的service或者manager层 @Repository  持久层,就是我们常说的DAO层  而@Component
MVC模式中如何区分应用程序逻辑(Controller层)和业务逻辑(Model层)?
现在的大部分框架都是 MVC 模式,但 MVC 三个部分怎么配合,这里做了一点总结: 基本原则:业务逻辑代码应该写在 M 里面,而应用程序逻辑应该写在 C 里面。V 只是单纯的展示数据。 举个简单例子吧:用户往购物车添加一个商品 用户点击商品的“添加到购物车”按钮,引起一次请求。服务器开始处理该请求,过程: 1、检查当前用户是否有权限(比如是否已经登录、用户帐户状态、是否可以购物等) 2
spring mvc 传中文 到controller层乱码的 解决方法
String sta =null;         try {             sta = new String(status.getBytes("iso-8859-1"),"utf-8");         } catch (UnsupportedEncodingException e) {         }
mvc控制层Controllers增删改查方法
一、添加 [HttpPost] public ActionResult Create(City city) { if (ModelState.IsValid) { db.Citys.Add(city); db.SaveChanges(); return RedirectToAction("Index"); } //添
Spring MVC控制层传递对象后在JSP页面中的取值方法
Spring MVC控制层传递对象后在JSP页面中的取值方法
spring mvc —— servlet Filter 过滤器实现控制层 2
@WebFilter(filterName = "DispatcherFilter", urlPatterns = { "/*" }) public class DispatcherFilter implements Filter { @Override public void init(FilterConfig filterConfig)
Java自学之路-Java中级教程-12:SpringMVC的三层架构:模型层、表现层、控制层
MVC即Model、View、Controller三者的缩写。Model为模型层,View为表现层,Controller为控制层。其中M处于最底层,V在最上层,中间层为Controller。比如用户访问网站,首先接触的是View,即是网页。通过访问网页的url,就会传到Controller层,再由Controller层去调Model层。   MVC的三层架构表现为Java的jsp、bean、c...
springMVC——控制层重定向到控制层
控制层重定向到控制层有两种情况,有参数传递,无参数传递。重定向到控制层的典型情况是登录成功后重定向list显示数据 实现重定向关键代码只需要在return字符串中加入前缀:redirect: 一、无参数传递:return &quot;redirect:/listname.spring&quot;; Login package com.controller; import org.springframe...
spring mvc Controller层拦截器配置教程代码实例
spring mvc Controller层拦截器配置教程代码实例 源代码下载地址:http://www.zuidaima.com/share/1825298701863936.htm
SpringMvc控制层之间的带参数访问
这里分享一个SpringMvc控制层之间带参数的互相访问方式,有时候会遇到由一个控制层直接转到本项目的另外一个控制层,这就可以用一下的这个方法,当然如果你想要实现后端跨域,那就只能尝试用httpclient或者已经封装的RestTemplate来实现。好了,这里还是言归正传,把后端controller相互访问的方式贴出来吧。 package com.cardniu.wechat.controll
Java代码优化提点
页前导语        代码优化是指对程序代码进行等价(指不改变程序的运行结果)变换。程序代码可以是中间代码,也可以是目标代码。等价的含义是使得变换后的代码运行结果与变换前代码运行结果相同。优化的含义是最终生成的目标代码更加轻松自如(运行时间更短、占用空间更小)地工作,时空效率优化。       代码调优属于性能优化的范畴,制定代码优化的目标是什么才不会偏离优化的本质。如果开始编码的时候就将大
springmvc之Excel的导出 简单例子 controller层的
private static List&amp;lt;Member&amp;gt; getMember() throws Exception { List list = new ArrayList(); SimpleDateFormat df = new SimpleDateFormat(&quot;yyyy-mm-...
springmvc 针对大数据量操作数据库 优化
20151014_针对大数据量的数据库操作问题 转至元数据结尾 由 胡明伟创建并最终修改于 十月 18, 2015 转至元数据起始   程序针对处理大数据量的问题,通常需要对代码进行优化后进行操作,切不可同步循环逐一针对每条记录的数据单独操作数据库,这样不仅很浪费资源,导致系统效率慢,还有可能导致其他问题的出现。  
对Springmvc view层的理解
MVC框架可以把应用清晰明了地分为三个部分:Model层–数据层,View层–视图层,Controller–逻辑层,Model层负责整合数据,View层负责页面渲染,Controller层负责实现业务逻辑。我在这里简单说一下我对MVC框架中的View层的理解。View层一般包含两个部分:View类和模版文件,View类并不是必需的,采用View类可以整合代码,因为有时候View层也会有一些复杂的逻...
文章热词 图像处理优化 Java spring cloud用户权限设计 Java spring cloud 部署方案 池化层原理 Java spring cloud前后端分离权限控制
相关热词 c# 如何屏蔽一段代码 c#如何优化自己的代码 c++ 代码 规范 如何学习python设计 如何设计人工智能课程