Java Spring MVC分层设计

本文介绍了使用Java Spring框架进行Web开发时,如何应用MVC模式进行分层设计。内容涉及Service层、DAO层的职责和实现方式,强调了业务逻辑与数据访问的解耦,以及在Service层和DAO层采用的工厂模式。
摘要由CSDN通过智能技术生成

第一次尝试着用Java做Web开发,使用了Java Spring框架,顺便说一句,如果使用Spring开发,建议使用STS(Spring Tool Suite) IDE,它很好的集成了Spring、Maven等框架,使用起来特别方便,尤其是第一次使用Spring框架进行开发,它极大的方便了开发人员,通过快捷菜单及可很简单的配置好Spring开发环境,自动下载、更新Maven依赖包。话不多讲,回到文章的正题。

Spring是一个在Java业界很流行的MVC框架,所谓MVC即模型-视图-控制器,将应用程序的逻辑层与展现层进行分离的一种设计模式。

  • 模型(Model)代表数据控制器。数据的读取,插入,更新都是由模型来负责。
  • 视图(View)是展示给用户的最终页面。视图负责将数据以用户友好的形式展现出来。
  • 控制器(Controller)是模型,视图以及其他任何处理 HTTP 请求所必须的资源之前的中介

概述

一个典型的页面浏览行为在程序端的流程是这样的:

  1. 控制器最先被调用,并被赋予外部输入
  2. 控制器根据外部输入向模型请求数据
  3. 模型从数据库获取数据并发送数据到控制器
  4. 控制器处理该数据并发送封装好的数据到视图
  5. 视图根据接到的数据最终展示页面给用户浏览

使用Java进行MVC模式开发时,往往将数据模型分为两部分,即DAO(Data Access Object,数据访问对象)和Service(业务逻辑模型)。在第2步中,控制器向模型请求数据时,并不是直接向DAO请求数据,而是通过Service向DAO请求数据。这样做的好处是,可以将业务逻辑与数据库访问独立开,为将来系统更换数据保存介质(如目前系统使用文件系统存储数据,将来可以更换为使用数据库存储,又或者是现在使用了MSSQL存储数据,将来更换为Oracle或是Mysql等)提供了很大的灵活性。

下图给出了分层设计模型。控制器只需要调用Service接口中的方法获取或是处理数据,Service层对控制器传入的数据进行业务逻辑处理封装后,传给DAO层,由DAO层负责将处理后的数据写入数据库中。

在Service层使用了抽象工厂模式来实现Service层与DAO层的低耦合,Service层并不知道DAO层是如何实现的,实际上也不需要知道系统使用了哪种数据库或是文件系统。

在DAO层使用工厂模式来创建数据模型的实体对象。



Service层设计

接口代码,这里使用了泛型技巧,确保每个Service只处理一种数据类型。

package com.emerson.etao.service;

import java.sql.SQLException;
import java.util.List;

/**
 * 业务实现层接口
 * 
 * @author Chris Mao(Zibing)
 *
 * @param <T>
 */
public interface IBaseService<T> {

    /**
     * 将实体类对象持久化,写入到数据表中
     * 
     * @param T
	 * @return 返回新写入记录的自增ID
     * @throws SQLException 
     */
	public long insert(T entity);
	
	/**
	 * 根据Id值,将实体类数据回写到数据库
	 * 
	 * @param id
	 * @param T
	 * @return 返回更新的记录笔数
	 * @throws SQLException 
	 */
    public int update(long id, T entity);
    
    /**
     * 根据Id值从数据库中删除实体类数据
     * 
     * @param id
	 * @return 返回删除的记录笔数
     * @throws SQLException 
     */
    public int delete(long id);
    
    /**
     * 根据Id查询具体的实体类信息,并返回实体类对象
	 * 若查询不到数据则返回null
	 * 
     * @param id
     * @return T
     */
    public T getById(long id);
    
    /**
     * 获取列表
     * 
     * @return List
     * @throws SQLException
     */
    public List<T> getAll();
}

下面是具体的Service层接口代码,

package com.emerson.etao.service.base;

import java.util.List;

import com.emerson.etao.entity.base.BusinessApp;
import com.emerson.etao.entity.base.Communicator;
import com.emerson.etao.entity.base.Customer;
import com.emerson.etao.service.IBaseService;

/**
 * 客服类操作接口
 * 
 * @author Chris Mao(Zibing)
 * @param <T>
 *
 * @param <T>
 */
public interface ICommunicatorService extends IBaseService<Communicator> {
	
	public List<Communicator> getAll(Customer customer);
    
    /**
     * 为客服分配商业应用
     * 
     * @param c
     * @param appList
     * @see BusinessApp
     */
    public void assignBusinessApp(Communicator communicator, List<BusinessApp> appList, boolean deleteExists);
    
    /**
     * 为客服分配客户
     * 
     * @param c
     * 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值