最近做了一个ssh项目,但是非常不熟悉,总结中发现很多问题,请大家指教一下
1.struts2是对应j2ee三层架构的表现层吗?也就是说mvc只针对于表现层?但是struts2中不是也有pojo类吗,pojo不是业务逻辑相关的吗?还是说struts2也包括了业务逻辑层的相关东西
2.我刚做完的项目里用到了实体类,service层,dao层,我想问下service层就是业务逻辑层吗?对应于ssh中的spring吗?我刚完成的项目里貌似对service层的用处不深,大部分都是直接调用了dao层的方法,仅此而已,我在网上查了下,正规来说,处理一些业务逻辑,比如查询用户,那么dao层就应该只涉及到对数据库进行操作(我是用的hibernate,对实体类操作就可以了)而应该把那些比如判断用户输入是否合法之类的什么放在业务逻辑层进行处理也就是相关代码放在service层,这样说对吗?
3.项目中虽然用到了spring,但是对其有太多的疑问了,比如控制反转,我查了下是不是可以简单的理解为把一个对象的实例化交给容器处理,而不需要自己new? 那么我项目中有个实体类City ,然后在applicationcontext中配置有<value>com/citycard/pojo/City.hbm.xml</value>,然后在action中getter setter而不需要new了,这是不是一个用了控制反转的例子呢?如果是的话,它的好处在哪儿呢,实在没有看出来解耦性的好处啊。
4.对MVC的model概念太模糊了,看了很多资料看是感觉不知道是怎么回事,能解释一下吗
------解决方案--------------------
严格来说,SSH是三层架构的一种实现方式, 并不代表strtus是其中的某一层,只能说SSH组合起来搭建了三层架构,比如Spring ,在三层中没有定义地位,无法说他是其中的某一层,但是可以将三层架构定义出来的层组合起来。MVC只是一种模式,而SSH只是实现这种模式的一种组合方式
------解决方案--------------------
一、
1、struts2不仅是mvc的表现层,但他主要为javaweb开发提供了辅助与简化,模型层(比如表单)、控制层(比如action)都涉及到了,jsp中常用的struts2Tag,这个也算是一种model。
2、pojo是数据库对象关系映射模型,用对象的方式表述一张数据库表,恰恰不是业务,业务模型可称之为bo,而不是po或pojo。
3、mvc没那么简单,更没那么复杂,一个简单的servlet+jdbc的程序,你的jsp,就是view,你的servletClass,就是control,你写的jdbcUtil,或业务模型,就是model,mvc不是仅“针对表现层”。
二、
1、你说的service算是业务逻辑层,你的理解基本正确,一张表对应一个pojo,对应一个dao,一个dao,负责一张表最基础最简单的增删改查,面向的是基础数据库操作,而service,是面向业务逻辑,根据业务需要,顺序调用各种组件或dao完成需求,正如你所说,用户名密码输入合法性,可以放在service里做,做完过关,再去调dao查数据库,这是个简单的例子。
三、
1、控制反转,即打断使用者与工具之间的连接关系,将这个关系转由第三方来控制,达到解耦的目的,工厂模式下,这个第三方就是工厂,spring下,这个第三方就是spring。好处是统一管理组件实例的创建,在修改时,便于修改,在扩展时,不必修改老代码。
2、不理解的话,可查百度,再不理解,那就先别纠结,干其他事去,一两年后再回来看,一下子就领悟了。
四、
1、举个ssh的例子,你写的pojo、bo、dao、service,或者struts的form,这些都是model,程序的关键点在于数据和处理流程,而model,则是模拟了现实环境,用对象的方式表述、管理了这些数据。可以思考下,常见的web应用里,肯定有登录账号及其账户信息这些资讯,如果你不用一个model来表述,会怎样?是不是感觉挺乱?