`
pouyang
  • 浏览: 321702 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Experience 杂谈Dao,Service,Controller层(Struts1,Spring,Ibatis)

阅读更多
软件的设计要体现可扩展性,可维护性,可重用性

谈谈 Struts1 + Ibatis + Spring 进行开发所要注意的问题


1 命名规范问题

查询 日期 在sql中有sql date toChar转
插入更新,在程序中转 由String 改为Date


2 三层约束问题
2.1 高内聚低耦合
      Controller,Service,Dao三层之间要低耦合,各个层内部要高内聚,当然达到了松耦合也就达到了高内聚了。这些话一般人都会讲,在这里我谈的是我在工作中所遇到的,以及加上自己的想法,只是鄙见而已,请多赐教。
      各个层之间不能相互牵扯,比如说:Controller层,我现在用的是Struts1,如果把Struts1的form作为参数传到了Service层,然后又传到了Dao层(因为Struts1的form只是用来传递参数的,The Struts1 framework provides an ActionForm class to help transfer data between Model and View,当然还可以加些validate等操作)。 如果有更好替代Struts1的Controller层的框架,不用Struts1了,那Service,Dao层岂不是不能用了,而且做测试的时候,还要去new Struts1的form,多么麻烦的事啊!根本不能重用了,这样的软件是失败的软件的,是恶心的软件。当然,如果只是为了满足现状,对以后的事什么都不在乎话也行。
     为了解决这样的问题,就借助了中间的JavaBean,把form参数转到JavaBean中,在把JavaBean往下层传递,到时候抛弃Struts1的时候,Service,Dao层的东西还是可以直接拿来用的。
     这个JavaBean怎么来定义呢?
     1,select:
       参数比较少的话,少于三个,直接传参数进Service层
       参数大于三个小于8个的话,用HashMap封装传进Service层
       参数大于8个以上可以新建一个QueryBean(JavaBean)封装参数传到Service层
       对于返回的参数,要新建xxxRDTO。为什么,这样很有利于扩展。稍后谈谈。
     2,update,insert就用String,HashMap,DTO就行了。

     Controller层:只负责收集页面上传递过来的参数。(页面初始化的数据,可以多次掉Service层的接口中的select方法,其他的插入更新操作必须一个Action里调一次Service),这样会带来问题:例如 插入一个人员信息的时候(规则是不能有同名的),这个时候只在Action层调一次Service 层的的返回boolean型的insert方法的时候,前台只能显示插入失败,插入成功,而对于存在同名的人员这种提示是无法实现的,这个时候可以把Service层的这个接口的方法的返回类型该为HashMap,就可以返回给前台丰富的提示。但是这样返回HashMap好吗?Most often, the Model is represented as a set of JavaBeans. Typically, developers will use the Commons BeanUtils to transfer data between ActionForms and the Model objects (or a Facade). Preferably, the Model will do the "heavy lifting", and the Action will act as a "traffic cop" or adapter.


    
     Service层: 只负责业务校验,业务处理。(可采取重载为其他模块提供丰富的接口)

     Dao层:只负责与数据库的操作。(可采取重载为其他模块提供丰富的接口)
            每个Dao层都有与相应的表的操作,都有一个比较全的insert,update全表的操作,由于DTO是与表对应的,所以测试的时候如果inert的是DTO的话,那么就认为DTO的全字段的插入,update的参数是DTO的话,那么就认为DTO的全字段的更新。回到
对于select返回的参数,要新建xxxRDTO,而不能用DTO的缘故。为什么? 举个例子,如果返回的是人员的DTO且是全字段,现在需求变更,人员字段显示要增加xx字段(xx字段是在另外一张表中),那么如果少做改动的话,在DTO里加入这个属性即可,这个时候冲突就来了,因为每个Dao层都有insert和update全表的操作(DTO的所有属性),这个时候就有问题了,因为刚加的这个属性是另外一张表的字段,如果做全字段插入更新的话(测试),那么很容易出错的.那这怎么办?当然有解决的方法,为了达到扩展伸缩的效果,新建一个xxxRDTO,这个xxxRDTO可以继承刚才的人员DTO,只在这个RDTO里加一个字段,这个RDTO用于Ibatis返回的参数,就可以达到所有的效果,也利于扩展。


以后陆续补上

    
    





分享到:
评论

相关推荐

    struts1 spring ibatis整合项目源码

    struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码

    spring+struts2+ibatis整合的jar包

    在提供的"spring+struts2+ibatis整合的jar包"中,lib1可能包含了这三个框架以及它们的依赖库。这些jar文件是运行整合应用必不可少的组件,它们包含了框架的API、实现和一些工具类,帮助开发者快速搭建和运行整合项目...

    struts1+ibatis+Spring demo

    Struts1、iBatis和Spring是Java Web开发中三个重要的框架,它们分别负责MVC模式中的表现层、数据访问层以及业务层的管理。这个"struts1+ibatis+Spring demo"是一个示例项目,展示了如何将这三个框架集成到一起,实现...

    Struts2+Spring+iBATIS架构实现

    Struts2 Spring iBATIS 架构 实现 Struts2 Spring iBATIS 架构 实现 Struts2 Spring iBATIS 架构 实现 Struts2 Spring iBATIS 架构 实现

    struts2 spring ibatis整合的最少最全jar包

    Struts2、Spring和iBatis是Java Web开发中非常重要的三个框架,它们分别负责MVC模式中的Action层、业务逻辑层以及数据访问层。这三个框架的整合可以提供一个高效且灵活的开发环境,帮助开发者构建出结构清晰、易于...

    SSI Spring+struts1+ibatis案例

    在IT行业中,SSI(Spring、Struts1、iBatis)是经典的Java Web开发框架组合,它们各自负责应用的不同层面,协同工作以构建高效、可维护的系统。在这个"Spring+struts1+ibatis案例"中,我们将深入探讨这三个框架如何...

    struts1.2 spring2 ibatis 集成项目实战源码

    在请求到达时,Struts会调用由Spring管理的Action,Action执行业务逻辑,通过Service层调用DAO层进行数据操作,而DAO层使用iBatis与数据库交互。在实际项目中,你可能还会发现关于国际化、异常处理、安全性等方面的...

    Struts2 Spring Ibatis mysql 项目整合

    在本项目中,Spring可以管理Struts2的Action、Service以及DAO层的实例,通过@Autowired注解自动装配所需依赖。同时,Spring的AOP(面向切面编程)功能可用于事务管理,确保数据操作的一致性。 iBatis作为轻量级的...

    Struts2 Spring Hibernate IBatis

    Struts2 Spring Hibernate IBatis Struts2 Spring Hibernate IBatis Struts2 Spring Hibernate IBatis Struts2 Spring Hibernate IBatis Struts2 Spring Hibernate IBatisStruts2 Spring Hibernate IBatisStruts2 ...

    Struts1+Spring+iBatis-jar包

    Struts1、Spring和iBatis是Java Web开发中经典的三大框架,它们分别负责MVC模式中的控制器、业务逻辑管理和服务层数据访问。这个"Struts1+Spring+iBatis-jar包"集合了这三个框架的核心组件,为开发者提供了一个快速...

    struts2 spring ibatis 整合架构

    Struts2、Spring和iBatis是Java Web开发中常用的三个框架,它们分别负责MVC模式中的Action层、业务逻辑层以及数据访问层。将这三个框架整合在一起,可以构建出高效、灵活的企业级应用。 **Struts2** 是一个基于MVC...

    struts+spring+ibatis框架集合教程

    Struts、Spring和iBatis是Java开发中常用的三大开源框架,它们各自专注于应用程序的不同层次:Struts处理表现层逻辑,Spring提供全面的依赖注入和事务管理,而iBatis则负责数据访问层的工作。本教程集合了这三者的...

    struts2+spring+ibatis整合项目实例

    1. **Struts2**:Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它提供了一种组织应用程序的方式,简化了Web应用的开发。主要负责处理HTTP请求,路由到相应的Action,执行业务逻辑,并将...

    Struts+Spring+Ibatis示例

    Struts、Spring 和 iBatis 是 Java Web 开发中三个非常重要的开源框架,它们共同构建了一个灵活、可扩展且易于维护的系统架构。这个"Struts+Spring+Ibatis示例"提供了一个基础的整合应用,帮助开发者理解这三者如何...

    struts2 spring ibatis

    Struts2、Spring和iBatis是Java Web开发中非常重要的三个框架,它们共同构建了所谓的"SSI"(Struts2-Spring-iBatis)架构,广泛应用于许多公司的项目开发中。下面将详细介绍这三个框架以及它们如何协同工作。 **...

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis是两种常见的Java Web应用程序集成框架,它们分别基于ORM框架Hibernate和轻量级数据访问框架Ibatis。这两种框架结合Spring,旨在提供一个强大的、可扩展的、易于...

    struts2、spring、ibatis整合

    4. **整合**:在Struts2的Action类中,通过Spring的@Autowired注解注入Service层的Bean,Service层再通过@Autowired注入DAO层的Bean。在DAO层,使用iBatis提供的SqlSession执行SQL。 5. **测试**:编写JUnit测试...

    struts+spring+ibatis的Demo

    通过研究这个Demo,开发者可以学习到如何在实际项目中运用Struts 2进行控制器层的设计,利用Spring进行服务层和持久层的管理,以及如何通过iBatis进行数据库操作。这有助于提高Java Web开发的效率和代码质量。

    struts2 spring ibatis 项目整合源码

    Struts2、Spring和iBatis是Java Web开发中三个非常重要的框架,它们分别负责MVC模式中的Action层、业务层管理和数据访问层。在这个项目整合源码中,这三个组件协同工作,构建了一个完整的Web应用程序。 Struts2是...

    struts2 spring ibatis2.3整合

    6. **Service层**:包含业务逻辑,这些bean由Spring管理,并通过依赖注入获取到iBatis的Mapper实例,执行SQL操作。 7. **DAO层**:iBatis的Mapper接口实现,与数据库交互。 通过这样的整合,我们可以充分利用这三个...

Global site tag (gtag.js) - Google Analytics