会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 ssm框架三层架构图!
当前位置:首页 > 探索 > ssm框架三层架构图 正文

ssm框架三层架构图

时间:2026-10-17 06:34:07 来源:烟消火灭网 作者:综合 阅读:628次

打开任何一个基于SSM框架的架层架构Java Web项目,你都会看到代码被切成了三块:Controller、架层架构Service、架层架构Dao。架层架构这不是架层架构为了好看,而是架层架构因为不这么切,改一个字段可能要把整个项目翻一遍。架层架构我见过一个早期项目,架层架构所有逻辑塞在Servlet里,架层架构后来加一个“用户积分”功能,架层架构三个开发改了五天,架层架构还引入了两个新bug。架层架构三层架构就是架层架构在还这种债。

先看Controller层。架层架构它站在最外面,架层架构直接面对浏览器或App发来的HTTP请求。比如用户点“提交订单”,请求打到OrderController,它做三件事:接参数、做基础校验、把活儿转给Service。它不该写业务规则,也不该碰数据库。我见过有人在Controller里直接调JDBC,代码是能跑,但过两个月自己都忘了密码加密是在哪一层做的。Controller的代码通常很短,一个方法十几行,返回JSON或跳转页面。它像前台接待,登记完就转给后台。

Service层是真正干活的地方。订单能不能提交,取决于库存够不够、用户有没有被拉黑、优惠券是否过期,这些判断全在Service里。它不关心请求从哪来,也不关心数据存到哪张表。Service方法通常对应一个完整业务动作,比如createOrder(Long userId, Long itemId)。这里会调用多个Dao,可能还要开事务。我写过一个退款逻辑,Service里先查原订单,再算可退金额,然后调支付网关,最后更新订单状态。如果把这些塞进Controller,那个类会膨胀到两千行,谁都不敢动。

Dao层只做一件事:跟数据库说话。它提供selectById、insert、updateStatus这种细粒度方法。MyBatis是SSM里常用的Dao实现,SQL写在XML或注解里。Dao不该有业务判断,比如“如果用户是VIP就打九折”这种逻辑不能出现在SQL里——那是Service的事。我见过一个Dao方法叫selectUserWithDiscount,里面嵌了三层if-else,后来加一个折扣类型,SQL改到崩溃。Dao应该像扳手,只负责拧螺丝,不决定拧哪颗。

三层之间靠接口和实体类传递数据。Controller拿到UserVO,转成UserDTO给Service,Service再转成UserEntity给Dao。多一层转换看起来麻烦,但换来的是各层独立变化。前端要加个字段,只改VO;数据库换表,只改Entity。有个项目为了省事,三层共用同一个User类,结果前端传了个password字段,直接存进数据库,闹出过安全事故。

这种分层不是Java独有的,但SSM把它落到了具体文件上。Spring管对象和事务,SpringMVC管请求路由,MyBatis管SQL映射。三层各拿各的配置,各写各的代码。一个新人进项目,先看Controller知道有哪些接口,再看Service明白业务规则,最后看Dao清楚表结构。反过来,如果代码混在一起,新人只能靠猜。

有人觉得三层架构啰嗦,小项目写个增删改查要建六个文件。我承认,一个只有五个页面的后台,三层确实重。但项目只要活过三个月,需求就会变。三层架构给变化留了缝——改界面不动业务,改业务不动数据库。那些一开始图快省掉Service的项目,后来都在补。

最后说个细节。三层架构里,异常怎么传也有讲究。Dao抛SQLException,Service捕获后转成自定义的BusinessException,Controller再决定返回错误码还是错误页。如果让SQLException直接冒到Controller,前端会看到一堆堆栈信息,既不安全也不友好。分层不只是分文件,也是分责任。

(责任编辑:时尚)

相关内容
  • 国内静态ip购买
  • sqlmap注入教程
  • 盗取公民信息罪的量刑
  • 知乎匿名回答在哪看
  • 服务器被劫持dns
  • linux访问网站
  • python爬虫网站完整代码
  • 外贸圈名人堂
推荐内容
  • linux部署web项目
  • 软件漏洞会造成哪些危害
  • 青岛农业大学官网登录
  • 可以看海洋的网站
  • 河北大型反渗透净水设备价格
  • 夸克怎么搜索不正经网站