业务层设计与开发(业务层标准实现类) | 学习笔记

简介: 简介:快速学习业务层设计与开发(业务层标准实现类)

开发者学堂课程【DAO 开发实战业务分析:业务层设计与开发(业务层标准实现类)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/399/detail/5167


业务层设计与开发(业务层标准实现类)


内容介绍:

一、主要操作

二、具体操作

三、修改操作

四、总结


一、主要操作

本着业务层的主要操作有两个:

分别是控制数据库的打开和关闭,可以通过 DatabaseConnection 完成的以及控制数据层的调用,需要通过 Factory 工厂类取得 IMemeberDAO 接口对象,同时还需要传递 Connection。说明在整个业务层之中不管数据层的操作是否有问题,最终都一定要进行数据库的关闭处理。

IMemberService 的子类为 IMemberServiceImpl 子类,这个子类要求保存在cn.mldn.oracle.service.impl 子包之中。

然后跟上 service ,写出 impl 位,找到 MemberServiceImpl,实现IMemberService 的操作接口,

可以得到程序如下:

1package cn.mldn.oracle.service.impl;

2

3*import java.util.list;

9

10public class MemberServiceImpl implements IMemberService {

11

12    @Override

13    public boolean add(Member vo) throws Exception {

14       // TODO Auto-generated method stub

15       return false;

16    }

17 

18    @Override

19    public boolean add(Member vo) throws Exception {

20       // TODO Auto-generated method stub

21       return false;

22    }

而一旦取得11行这个位的对象,意味着要开始操作数据库,所以代码写为private DatabaseConnection dbc = new DatabaseConnection() ;。因为程序的设计问题,一旦要取得本位十位化的项,就一定意味着要有数据库的连接对象。

数据层需要一个明确的 Connection 参数传递,导致整个设计的过程之中都需要考虑 Connection 问题,但后面改进后就不用再进行整个过程的考虑问题即为程序的设计问题。

不管中间经过了多少个操作,都会有异常出现,然后将异常向出抛,最后都要执行close()操作。即程序如下:

public boolean add(Member vo) throws Exception {

try {

} catch(Exception e) {

throw e ;

} finally {

this.dbc.close();

}

return false;

}

所以所有的操作代码加总,无论进行怎样的变化,此结构是不能够被改变的,数据库最后一定要进行关闭处理。


二、具体操作

(1)add 操作

举例如下:

public boolean add(Member vo) throws Exception {

try {

// 1、取得IMemeberDAO接口对象

IMemberDAO dao = DAOFactory.getInstance(MemberDAOImpl.class, this.dbc.getConnection())

if(dao.findById(vo.getMid())== null){// 2、判断当前的id是否存在

此处程序说明要根据 id 查找,但是没有查找到数据,用户则不存在,如果不存在,则再判断,

程序如下:

if(dao.findById(vo.getMid())== null){// 2、判断当前的id是否存在

if(dao. dao.findByPhone(vo.getPhone())==null){  // 3、电话不存在

if(vo.getAge() < 0){

如果小于等于0,则表示没有设置电话,即为:

if(vo.getAge() <= 0){  //没有设置电话/年龄或者设置错误

vo.setAge(-1);  //使用-1作为一个标志结果

}

如果以上都没问题,则

return dao.doCreate(vo) ;   // 4、进行数据库保存

以上可看出一个业务层要牵涉多个数据层调用。

(2)edit 操作

举例如下:

public boolean edit (Member vo) throws Exception {

try {

// 1、取得IMemeberDAO接口对象

IMemberDAO dao = DAOFactory.getInstance(MemberDAOImpl.class, this.dbc.getConnection())

// 2、要根据电话来查找数据是否存在,但需要考虑到判断的用户不能是自己

Member temp = dao.findByPhone(phone) ;

然后再找到

Member temp = dao.findByPhone(vo.getPhon()) ;

完成后要进行判断

if(temp == null) {

return dao.doUpdate(vo) ;

} else {     //不等于空,表示现在电话存在

if(vo.getMid().equals(temp.getMid())){  //自己的电话

return dao.doUpdate(vo

}

}


三、修改操作

(1)remove 修改

举例如下:

public boolean remove (Set<String> ids) throws Exception {

try {

if (ids == null || ids.size() == 0) {

return false ;

}

return DAOFactory.getInstance(MemberDAOImpl.class, this.dbc.getConnection()).doRemoveBatch(ids) ;

(2)get修改

举例如下:

public Member get (String id) throws Exception {

try {

return DAOFactory.getInstance(MemberDAOImpl.class,

this.dbc.getConnection()).findById(id;

(3)list 修改

举例如下:

public List<Member>list() throws Exception {

try {

return DAOFactory.getInstance(MemberDAOImpl.class,

this.dbc.getConnection()).findAll();

(4)Map 修改

举例如下:

public Map<String,Object>list(int currentPage, int lineSize) throws Exception {

try {

Map<String,Object>map = new HashMap<String,Object>() ;

} catch(Exception e) {

throw e ;

} finally {

this.dbc.close();

}

return map 

}

此处 map 无法返回。需要放到

Map<String,Object>map = new HashMap<String,Object>() ;

return map;

才可返回。因为是在 try 中定义的 map,所以只能在 try 中进行操作。

此时注意所需要的 key,分别是allMember和memberCount

public Map<String,Object>list(int currentPage, int lineSize) throws Exception {

try {

Map<String,Object>map = new HashMap<String,Object>() ;

IMemberDAO dao = DAOFactory.getInstance(MemberDAOImpl.class, this.dbc.getConnection())

map.put(“allMembers”, value) ;

再找到 dao,即

map.put(“allMembers”, dao.findAllSplit(currentPage, lineSize)) ;

map.put(“memberCount”, value) ;

再找到dao,即

map.put(“memberCount”, dao.getAllCount() ) ;

return map

同样在以下可使用,即

public Map<String,Object> list(String column, String keyword, int currentPage, int lineSize) throws Exception {

try {

Map<String,Object>map = new HashMap<String,Object>() ;

IMemberDAO dao = DAOFactory.getInstance(MemberDAOImpl.class, this.dbc.getConnection())

map.put(“allMembers”, dao.findAllSplit(currentPage, lineSize)) ;

map.put(“memberCount”, dao.getAllCount() ) ;

return map

但此时要此外做一个判断,即

IMemberDAO dao = DAOFactory.getInstance(MemberDAOImpl.class, this.dbc.getConnection())

if(column == null || keyWord == null || “”.equals(keyword))

map.put(“allMembers”, dao.findAllSplit(currentPage, lineSize)) ;

map.put(“memberCount”, dao.getAllCount() ) ;

} else {

map.put(“allMembers”,dao.findAllSplit(column,keyword,currentPage, lineSize)) ;

map.put(“memberCount”,dao.getAllCount(column,keyword) ) ;

}

return map

在整个业务层的实现子类里面到处充斥着打开-关闭数据库。如完成核心业务

IMemberDAO dao = DAOFactory.getInstance(MemberDAOImpl.class, this.dbc.getConnection())

// 2、要根据电话来查找数据是否存在,但需要考虑到判断的用户不能是自己

Member temp = dao.findByPhone(phone) ;

然后再找到

Member temp = dao.findByPhone(vo.getPhon()) ;

完成后要进行判断

if(temp == null) {

return dao.doUpdate(vo) ;

} else {     //不等于空,表示现在电话存在

if(vo.getMid().equals(temp.getMid())){  //自己的电话

return dao.doUpdate(vo

}

}

,其余都是跟业务有关的辅助操作。同时数据库也要考虑到事务问题,如删除时如果发现有一部分数据没删除并且出错,错误之前时都会默认执行,这个过程也要进行一些控制处理才合适,此时发现业务层只能说是完成了功能,但是不够完善,所以还要进行大量的修改。


四、总结

在现在整个业务层的处理中,业务层依然要通过DatabaseConnection 操作 Connection,在之后的处理过程中也要跟上 MemberDAO 接口包括什么,不关注接口子位的问题,因为子位被 DAOFactory 所隐含,所以只取得 DAO 的操作接口,而后 DAO 的操作接口与 Connection 产生关系,从而实现业务层的操作流程,以上就是业务层的操作子类。

相关文章
|
5月前
业务系统架构实践问题之什么是业务层臃肿,能力层单薄如何解决
业务系统架构实践问题之什么是业务层臃肿,能力层单薄如何解决
|
XML Java 数据格式
Spring框架核心功能实现
概要 手写Spring启动以及扫描流程 手写getBean流程 手写Bean生命周期流程 手写依赖注入流程 手写BeanPostProcessor机制 手写Aop机制 Spring启动以及扫描流程实现 我们平时都是使用这两种方法获得spring容器,上面的是通过加载类路径上的配置文件来获得容器。下面的方式和上面的原理相同只不过是通过注解的形式去实现,我们传入的也是一个配置类的class文件,我们可以把这个文件类比成第一种方法中的xml文件,然后这个xml文件里的一个个标签都变成了注解。 基础环境搭建 首先搭建好基础环境: 我们的测试类: public class MySpringT
41 0
|
7月前
|
设计模式 缓存 编译器
【C/C++ 设计模式应用】精细化职责与灵活性:C++中的发送接口和数据转换基类设计
【C/C++ 设计模式应用】精细化职责与灵活性:C++中的发送接口和数据转换基类设计
128 0
|
监控 小程序 Java
《优化接口设计的思路》系列:第五篇—接口发生异常如何统一处理
大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
393 0
《优化接口设计的思路》系列:第五篇—接口发生异常如何统一处理
|
设计模式 前端开发 JavaScript
14分布式电商项目 - 前端分层以及控制器继承
14分布式电商项目 - 前端分层以及控制器继承
88 0
|
存储 设计模式 缓存
复杂逻辑业务层治理探究
复杂逻辑业务层治理探究
410 1
|
测试技术 持续交付 微服务
09 微服务接口:怎么用Mock解决混乱的调用关系?
09 微服务接口:怎么用Mock解决混乱的调用关系?
|
开发者
业务层设计与开发(定义业务层标准) | 学习笔记
简介:快速学习业务层设计与开发(定义业务层标准)
150 0
业务层设计与开发(定义业务层标准) | 学习笔记
|
SQL Java 数据库连接
数据层设计与开发(数据层标准实现类) | 学习笔记
简介:快速学习数据层设计与开发(数据层标准实现类)
153 0
数据层设计与开发(数据层标准实现类) | 学习笔记
|
开发者
数据层设计与开发(数据层工厂类) | 学习笔记
简介:快速学习数据层设计与开发(数据层工厂类)
109 0
数据层设计与开发(数据层工厂类) | 学习笔记