问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mvc设计模式中请求的json解析应该放在controller还是service层?_百度知 ...

发布网友 发布时间:2024-09-30 13:00

我来回答

2个回答

热心网友 时间:2024-10-07 12:19

我们项目里分了三层:

表现层:Spring MVC,负责接收Http请求、展现(返回)结果、简单校验

App层:提供应用层的功能,比如导入、导出、复杂校验

Domain层:处理业务逻辑,比如一些Service

调用顺序是单项的:Controller->App->Domain

且感知关系为:Controller->App->Domain,即下层不感知上层

先回答你第一个问题:

你说的第一个问题我是否可以理解为,Http请求过来的参数不是Object,而是一堆基本类型,但是你的Service接收的参数是Object。正确的做法应该是,在Controller将“生”参数转换成Object对象,然后调用Service。

为何这样是正确的?因为Service属于Domain层,里面是业务逻辑,其接受的参数应该根据自己的需要而进行设计,不应该考虑Web层过来的参数是什么,这样才可以做到在不同场景下复用。

举个例子,你的Service应该可以被复用不同表现层环境下:

在一个Web程序中,用户传过来的参数是POST/GET形式给你的

在一个Web service程序中,用户传过来的参数是json或者SOAP

在一个Swing程序中,用户传过来的参数就是字符串

如果你将Service和具体某个表现层环境绑定,那么其方法参数肯定不稳定,结果就导致无法复用。

同理,Service的返回值也不应该和具体场景绑定。

在Spring MVC层面,Controller可以很方便的把参数转换成Object,相关文档

第二个问题:

这个问题可以分为三个:

1)简单的校验比如参数长度限制、非空判断等在哪里做?

简单校验利用Spring MVC的自身提供的机制做,相关文档,相关文档

2)和Service本身的业务逻辑平行的校验在哪里做,比如用户下单时判断其是否账号被禁用

我倾向于将这些逻辑校验放在App层做,Controller调用App,App调用两个不同的Service,将业务编织起来

3)和Service本身有关的业务逻辑校验怎么做

你举的是登录的例子,用异常告知调用方(Controller)处理结果没有任何问题。你也可以丰富Service的返回值达到这个目的,不过需要注意的是,Service的返回值的设计不能和表现层环境绑定,否则就不能复用了,这也就是为什么 @YaTou[xfslove] 提到了apache-shiro采用的是异常机制处理认证失败,因为只有这样才足够通用。

热心网友 时间:2024-10-07 12:17

放在model层

热心网友 时间:2024-10-07 12:11

我们项目里分了三层:

表现层:Spring MVC,负责接收Http请求、展现(返回)结果、简单校验

App层:提供应用层的功能,比如导入、导出、复杂校验

Domain层:处理业务逻辑,比如一些Service

调用顺序是单项的:Controller->App->Domain

且感知关系为:Controller->App->Domain,即下层不感知上层

先回答你第一个问题:

你说的第一个问题我是否可以理解为,Http请求过来的参数不是Object,而是一堆基本类型,但是你的Service接收的参数是Object。正确的做法应该是,在Controller将“生”参数转换成Object对象,然后调用Service。

为何这样是正确的?因为Service属于Domain层,里面是业务逻辑,其接受的参数应该根据自己的需要而进行设计,不应该考虑Web层过来的参数是什么,这样才可以做到在不同场景下复用。

举个例子,你的Service应该可以被复用不同表现层环境下:

在一个Web程序中,用户传过来的参数是POST/GET形式给你的

在一个Web service程序中,用户传过来的参数是json或者SOAP

在一个Swing程序中,用户传过来的参数就是字符串

如果你将Service和具体某个表现层环境绑定,那么其方法参数肯定不稳定,结果就导致无法复用。

同理,Service的返回值也不应该和具体场景绑定。

在Spring MVC层面,Controller可以很方便的把参数转换成Object,相关文档

第二个问题:

这个问题可以分为三个:

1)简单的校验比如参数长度限制、非空判断等在哪里做?

简单校验利用Spring MVC的自身提供的机制做,相关文档,相关文档

2)和Service本身的业务逻辑平行的校验在哪里做,比如用户下单时判断其是否账号被禁用

我倾向于将这些逻辑校验放在App层做,Controller调用App,App调用两个不同的Service,将业务编织起来

3)和Service本身有关的业务逻辑校验怎么做

你举的是登录的例子,用异常告知调用方(Controller)处理结果没有任何问题。你也可以丰富Service的返回值达到这个目的,不过需要注意的是,Service的返回值的设计不能和表现层环境绑定,否则就不能复用了,这也就是为什么 @YaTou[xfslove] 提到了apache-shiro采用的是异常机制处理认证失败,因为只有这样才足够通用。

热心网友 时间:2024-10-07 12:19

放在model层
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
和平精英 和平精英玛莎拉蒂保底多少出? 和平精英 吃鸡辆玛莎拉蒂要多少钱? 和平精英 和平精英玛莎拉蒂保底多少钱? 和平精英 吃鸡的玛莎皮肤大概要多少钱? 醉驾致人死亡交强险能赔付到肇事者吗 地铁跑酷 地铁跑酷2022狐狸皮肤怎么获得? 2023年河南省信阳市有三胎补助吗 【那位大师帮我看看这个紫水晶是不是天然的??】 iphone为什么接收到的短信不显示内容呢? 天龙八部帮会,创建帮会没有城市,都被站另了怎么办?除了建帮那50J还有... ...相煎何太急。———这首诗是谁所做,其意义何? 我们姐妹两几乎在同一天梦见我刚过世的父亲。 我前几天晚上做梦,梦到我过世的爸爸跟我说,说掩埋他的土不够这是怎么... 我买的是联想家悦H2409台式机``自带的系统是Vista``但是操作很慢``玩... 我家电脑是家悦H2409刚卖不到1年不知道怎么搞的开机经常卡在那里还有这... EXCEL中把一列数据改成相同的方法有哪些 从成都到海南2人玩3天左右要多少钱? 1月13日从海南到成都订机票提前半个月好还是提前几天好?大概多少钱? 苹果手机突然电量变成零了怎么回事? 北京科兴中维和北京生物哪个好 科兴和生物是一家吗 梦见小猫吃大猫是什么意思 ...电影,讲的是一个德国军官住在一户法国平民的家里,那... 网易云音乐里的视频可以在电脑上批量采集吗? 空调开不了制冷是什么原因? 王者荣耀什么情况下永久封号-四种永久封号情况介绍 美国,中国,韩国在这三个国家最最有名的名人有那些,要说出来人人都知道的... 请问一下立夏要吃蛋呢的原因 梦见种的兰花开花了,等一下又不见了,什么意思呢,会不会是昙花一现呢... 梦见捉到甲鱼是什么意思 梦见捉甲鱼什么征兆 如何医治颈椎疾病 为什么我打给公司的电话打不进来,短信也不提? 手机有时候电话打不进来,短信收不到,关机重新开机又好了,怎么回事? 化学有哪些盐 短信延迟,电话打不进来怎么回事啊??? 我手机别人电话打不进来,短信也收不到,怎么回事? 求化学科目中,溶解度较小的所有盐类化合物。 日啊,飞信怎么加好友,给忘了,求教/可怜 手机接短信延迟一两天 你好 我手机怎么打不进来电话,收不到短信 我要加飞信友怎么加 如何用最简便最低成本的办法实现2台电脑资料的动态同步更新?比如A电脑... 如何解答二次涵数 抖音直播游戏需要加入什么公会啊? 微博夜间模式不见了怎么办啊? 抖音加入工会是什么意思 95338是哪里的电话 二级机电工程资质在哪里办理 机电专业需要掌握什么样的技术才能算是一个合格的工程师 二战时期,德国为什么没有进攻瑞典?瑞典与盟国以及轴心国关 婺源有哪些自然风光景点值得一去?