项目实践 hrm项目的设计过程

人事管理系统的设计过程

  一、数据库表和持久化类

  1.1   进行需求分析,根据功能模块设计数据库表

  1.2   设计持久化实体

  面向对象分析,即根据系统需求提取出应用中的对象,将这些对象抽象成类,再抽取出需要持久化保存的类,这些需要持久化保存的类就是持久化对象(PO)。

  这里我们把它设计成单纯的数据类,不涉及业务逻辑方法。

  这个阶段,要仔细分析对象之间复杂的关联关系。

  1.3 创建持久化实体类  

  持久化对象之间的关联关系以成员变量的方式表现出来,而这种关联关系,通常对应数据库里的主键、外键约束。

  此外,持久化对象还有自己的普通类型的成员变量,这些成员变量对应数据库中的字段。

  二、实现DAO持久层

  MyBatis推荐通过定义接口来完成SQL语句的映射,该接口可以作为DAO组件使用。(即替代了传统在DAO层中使用JDBC进行数据库操作的方式)

  在DAO层中,每个DAO组件包含了数据库的访问逻辑;每个DAO组件可以对一个数据库表完成基本的CRUD操作。

  门面模式:业务逻辑组件封装DAO组件

  桥接模式:业务逻辑组件负责业务逻辑的变化,DAO组件负责持久化技术的变化

  1、使用一个公共常量类

  在这个常量类中定义一些可以方便使用的常量(一般是String),如清晰、简化数据库中表的名字,方便构造sql语句。

  2、定义DAO接口

  如果我们需要使用动态的SQL操作,那么需要定义专门的动态SQL操作提供类,以供DAO组件中使用。

  3、部署DAO层

  MyBatis中,只需要通过SqlSession的getMapper()方法获得对应的DAO接口实例,就可以调用接口中的方法完成相应的SQL操作。

  而在Spring中,这些DAO接口的实例由Spring容器负责生成和管理(即自动生成bean)。

  MyBatis社区自己开发一个MyBatis-Spring的中间件完成这个过程,通过SqlSessionFactoryBean类,可以将SqlSessionFactory纳入Spring的IOC容器。

  需要注意的是,在委托Spring管理DAO之前,必须要为其提供对应的数据源,这里使用C3P0数据源。

  即在applicationContext.xml中先配置数据源,然后创建SqlSessionFactoryBean类的bean,并在bean中设置好关联的数据源。

  <!--使用PropertyOverrideConfigurer后处理器加载数据源参数-->
  <context:property-override location="classpath*:db.properties"/>

  <!--配置C3P0数据源-->
  <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"/>

  <!--配置SqlSessionFactory,这个指定的class是MyBatis社区开发的用于整合Spring的bean-->

  

  三、实现Service持久层

  1、业务逻辑组件的设计

  业务逻辑组件是DAO的门面,即业务逻辑组件依赖于DAO组件提供的服务。

  业务逻辑组件面向DAO接口编程,只注重业务逻辑的实现,而无需关心数据库的访问。

  2、实现业务逻辑组件

  为了简化分页功能,设计了一个分页的JSP标签,只需要在页面使用分页标签,就可以完成所有的分页功能。(要使用JSP的标签需要在WEB-INF下增加一个tld标签文件)。

  hrmService接口及其实现类ServiceImpl,其中实现了接口中定义的所有业务逻辑方法。

  3、对业务逻辑方法事务管理

  只有对业务逻辑方法添加事务管理才是有实际意义的,对单个的DAO方法(基本的CRUD方法)增加事务管理没有太大的实际意义。

 <!--JDBC事务管理器-->
  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
        p:dataSource-ref="dataSource"/>

  <!--启用支持annotation注解方式的事务管理-->
  <!--transaction-manager属性用于指定使用哪个事务管理器-->
  <tx:annotation-driven transaction-manager="transactionManager"/>

  

  4、部署业务逻辑组件

  在applicationContext.xml中开启组件扫描,让Spring中自动创建Service Bean(与Controller Bean相同)。

<!--扫描包下的Java文件,有Spring相关注解的类,则把这些类注册为Spring的bean -->
  <context:component-scan base-package="com.biguo"/>

  四、web层

  数据库设计、中间层设计(DAO组件、业务逻辑组件)都已经完成,现在进行web层的设计。

  通常,系统的控制器和jsp一起设计。因为jsp页面发出请求后,该请求被控制器接收,然后控制器调用业务逻辑组件处理请求。

  1、控制器的处理顺序

  实际上,控制器是先对请求参数进行解析,然后调用业务逻辑组件中的方法进行业务处理,完成后,再将处理结果通过jsp页面呈现给用户。(这也是为什么一般的处理器方法会返回某个jsp文件的文件名)

  Spring MVC中,控制器有两块,一个系统核心控制器DispatcherServlet和业务控制器Controller。

  web.xml中:

  • 配置好Spring的核心监听器ContextLoadListener,并指定具体的applicationContext.xml作为Spring的配置文件;
  • 配置好Spring MVC的前端核心控制器DispatchServlet,并指定具体的springmvc-config.xml作为Spring MVC的配置文件,并通过映射定义设定为拦截所有请求;

    <!--配置spring核心监听器,默认会以 /WEB-INF/applicationContext.xml作为配置文件-->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <!--contextConfigLocation参数用来指定Spring的配置文件-->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml</param-value>
        </context-param>
    
        <!--定义Spring MVC的前端控制器-->
        <servlet>
            <servlet-name>springmvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>/WEB-INF/springmvc-config.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <!--让Spring MVC的前端控制器拦截所有请求-->
        <servlet-mapping>
            <servlet-name>springmvc</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>

 

  2、控制器的处理细节

  springmvc-config.xml中配置了一个拦截器,用于判断用户是否登录,如果没有登录,则用户不能访问网站,然后跳转到登录页面。这个拦截器的相关类需要自己实现。

<!-- 定义Spring MVC的拦截器 -->
    <mvc:interceptors>
        <mvc:interceptor>
            <!-- 拦截所有请求 -->
            <mvc:mapping path="/*"/>
            <!-- 自定义判断用户权限的拦截类 -->
            <bean class="com.biguo.interceptor.AuthorizedInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

  事实上这是个很关键的问题,系统是怎么保存一个用户的登录状态的?  

  最后,根据不同的功能模块,设计的不同的Controller,以调用相应的Service方法,进行业务处理。

  值得一提的是,有一个动态页面跳转控制器:

/**
 * 动态页面跳转控制器
 * */
@Controller
public class FormController{

    @RequestMapping(value="/{formName}")
     public String loginForm(@PathVariable String formName){
        // 动态跳转页面
        return formName;
    }
}

  

原文地址:https://www.cnblogs.com/bigbigbigo/p/8824807.html

时间: 2024-11-13 09:31:11

项目实践 hrm项目的设计过程的相关文章

阿里百秀项目实践---01项目介绍

01项目介绍 核心目标 了解 Web 开发过程(历史) 掌握基本的动态网站开发 培养 B/S 架构应用开发思维 锻炼 JavaScript jQuery AJAX 项目预览演示 一个自媒体信息发布平台 管理员(编辑)通过网站后台管理界面管理(发布.维护)自媒体内容 用户登录 登录界面可以根据是否填写表单内容拒绝登录操作 管理员可以通过用户名和密码登录到后台 内容管理 管理员可以通过管理后台查看全部内容 管理员可以通过管理后台增加内容 管理员可以通过管理后台删除内容 管理员可以通过管理后台修改内容

架构设计实践一:架构设计过程

节奏 做好架构设计需要做到看透需求.架构大方向正确.设计好架构的各个方面. 看透需求要求既要把需求找全,也要把需求项之间的矛盾关系.追溯关系搞清楚.需求找全可使用二维需求矩阵,从业务级.用户级.开发级和广义功能.质量.约束两个维度来找.一个矛盾关系的例子是安全性和互操作性的矛盾:一个追溯关系的例子是需求范围与系统目标的关系. 架构大方向正确是指要做好概念架构设计,概念架构重视“找对路子”,关注做好架构模式选型.集成技术选型等,不关注明确的接口定义.产品彩页上印的架构.售前提到的架构.投标使用的架

《Spring Boot 入门及前后端分离项目实践》系列介绍

课程计划 课程地址点这里 本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 个部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 项目实践开发.Spring Boot 介绍.前后端分离.API 规范等内容旨在让读者更加熟悉 SpringBoot 及企业开发中需要注意的事项并具有使用 SpringBoot 技术进行基本功能开发的能力:这最后的项目实战为课程的主要部分,我会带着大家实际的开发一个前后端分离的 Spring Boot 实践项目,

Windows on Device 项目实践 1 - PWM调光

在前一篇文章<Wintel物联网平台-Windows IoT新手入门指南>中,我们讲解了Windows on Device硬件准备和软件开发环境的搭建,以及Hello Blinky项目的演示.在这篇文章开始,我们进入项目实践部分. 由于Windows on Device设计的时候以Galileo为硬件平台,所以其外设接口也是兼容了Arduino的标准.另外,其编程模式也是参考了Arduino中使用的Wiring Language. 1. PWM原理 Pulse Width Modulation

Django项目实践2 - Django模板

http://blog.csdn.net/pipisorry/article/details/45061511 上篇:Django项目实践1 - 创建Django项目 Django模板 {视图和模板对逻辑和显示进行了分隔} 上面是使用 django.http.HttpResponse() 来输出"Hello World!".该方式将数据与视图混合在一起,不符合Django的MVC思想.或者HTML被直接硬编码在 Python 代码之中. html = "<html>

第六周作业:《人月神话》对我做项目实践的启示(一)

<人月神话>这本书有两个老师都有给我们推荐,第一个老师推荐时不以为然,第二个老师也推荐时,自己感觉应该是挺重要的吧,于是去图书馆借了这本书来看,刚借回来时,总觉得时间不够.作业很多,也没来的及看,就一直搁置在了那里,直到上周,在我们的项目实践开始近三周,但进度却一直赶不上来的情况下,看到了这本书,才拿起来看.目前还没看完,先写一点儿领悟到的东西. 作者从焦油坑,提出项目失败的表现,把过去几十年的大型系统开发比作一个炼焦坑,各种团队一个个地淹没在焦油坑,他们都试图解决面对的问题,但他们都必须去了

MVC项目实践,在三层架构下实现SportsStore-02,DbSession层、BLL层

SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管理.图像上传......是不错的MVC实践项目,但该项目不是放在多层框架下开发的,离真实项目还有一段距离.本系列将尝试在多层框架下实现SportsStore项目,并用自己的方式实现一些功能. 本篇为系列第二篇,包括: ■ 4.三层架构设计    □ 4.2 创建DbSession层 数据访问层的统一入口   

web实践小项目&lt;一&gt;:简单日程管理系统(涉及html/css,javascript,python,sql,日期处理)

暑假自学了些html/css,javascript和python,苦于学完无处练手几乎过目即忘...最后在同学的建议下做了个简单日程管理系统.借第一版完成之际,希望能将实践期间犯过的错误和获得的新知进行整理,希望能给其他初学者提供参考,也希望有大神在浏览我粗糙的开发过程中能指出一些意见或建议. (阅读以下内容需要有一定的html/css,javascript,python和sql基础,and谢谢阅读!) 注:实践中的环境为ubuntu 14.04操作系统,python3.4(2.7实测也可行),

MVC项目实践,在三层架构下实现SportsStore-01

SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管理.图像上传......是不错的MVC实践项目,但该项目不是放在多层框架下开发的,离真实项目还有一段距离.本系列将尝试在多层框架下实现SportsStore项目,并用自己的方式实现一些功能. 本篇为系列第一篇,包括: ■ 1.搭建项目■ 2.卸载Entity Framework组件,并安装最新版本■ 3.使用