java service层 封装,java - 在MVC开发模式中,封装对象应该放在Controller还是Service?Controller与Service应该如何交互?...

phpcn_u15822017-05-16 17:07:128楼

我们项目里分了三层:

表现层: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 提到了apache-shiro采用的是异常机制处理认证失败,因为只有这样才足够通用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Selenium 是一种用于自动化网页测试的工具,可以模拟用户在网页上的行为,如点击按钮、输入文本等操作。在使用 Java Selenium 进行网页测试时,可以将常用的操作封装成方法,以便在需要的时候直接调用,提高代码的复用性和可维护性。 首先,封装可以减少代码的重复编写,提高开发效率。通过将常用的操作封装成方法,可以避免在每个测试用例都编写重复的代码。例如,可以将常见的登录操作封装成一个方法,通过传入不同的用户名和密码,实现不同用户的登录操作。 其次,封装可以提高代码的可维护性。当需要修改测试用例某个操作时,只需要修改封装的方法即可,而不需要修改每个测试用例。这样可以降低维护成本,减少出错的可能性。 另外,封装还可以增强代码的可读性。通过封装方法,可以使测试用例的代码更加清晰易懂,减少冗余代码,提高可读性。这样其他开发人员在阅读和理解代码时能更快地定位功能和问题所在。 需要注意的是,在封装方法时,可以根据测试用例的需求,对操作进行不同次的封装。例如,可以将一系列操作封装成一个完整的测试步骤,也可以将单个操作封装成一个独立的方法,然后组合使用。这样根据具体情况灵活使用,可以使代码更加灵活和可扩展。 总之,封装是一种提高代码复用性、可维护性和可读性的方式,对于使用 Java Selenium 进行网页测试是非常有用的。通过合理的封装,可以减少重复编写代码,提高开发效率,同时还可以降低维护成本,提高代码的可读性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值