1. 设计思想

首先,设计个接口用来定义公共调用的DAO的方法,然后再定义个类用来实现这个接口。这样一来,我们就不要重复去写那些增、删、改、查的语句了。当然这个接口需要注入到BaseSevlet的类中,这个类就作为所有其它业务的父类,也就是,其它类,如,用户登录、用户注册的类都要继承这个类,而这个类唯一独特的地方就是,它是开启Spring的主要入口。

2. 设计类图

3. 代码实现

1)        业务操作数据库的接口。

public interface AlbumService
{/*** 验证用户登录是否成功。* @param name 登录的用户名* @param pass 登录的密码* @return 用户登录的结果,成功返回true,否则返回false*/boolean userLogin(String name , String pass);/*** 注册新用户* @param name 新注册用户的用户名* @param pass 新注册用户的密码* @return 新注册用户的主键*/int registUser(String name , String pass);/*** 添加照片* @param user 添加相片的用户* @param title 添加相片的标题* @param fileName 新增相片在服务器上的文件名* @return 新添加相片的主键*/int addPhoto(String user , String title  , String fileName, String uuidName);/*** 根据用户获得该用户的所有相片* @param user 当前用户* @param pageNo 页码* @return 返回属于该用户、指定页的相片*/List<PhotoHolder> getPhotoByUser(String user , int pageNo);/*** 验证用户名是否可用,即数据库里是否已经存在该用户名* @param name 需要校验的用户名* @return 如果该用户名可用,返回true,否则返回false。*/boolean validateName(String name);
}

2)        接口的实现类的具体实现方法。

public class AlbumServiceImpl implements AlbumService
{//业务逻辑组件所依赖的2个DAO组件private UserDao userDao = null;private PhotoDao photoDao = null;/*** 依赖注入2个DAO组件所需要的setter方法* @param userDao*/public void setUserDao(UserDao userDao){this.userDao = userDao;}public void setPhotoDao(PhotoDao photoDao){this.photoDao = photoDao;}@Overridepublic boolean userLogin(String name, String pass){try{//使用UserDao根据用户名查询用户User user = userDao.findByName(name);if (user != null && user.getPass().equals(pass)){return true;}return false;}catch ( Exception e){e.printStackTrace();throw new AlbumException("处理用户登录出现异常!");}}@Overridepublic int registUser(String name, String pass){try{//创建一个新的User实例User user = new User();user.setName(name);user.setPass(pass);userDao.save(user);return user.getId();}catch (Exception e){e.printStackTrace();throw new AlbumException("新用户注册出现异常!");}}@Overridepublic int addPhoto(String user, String title, String fileName, String uuidName){try{//创建一个新的Photo实例Photo photo = new Photo();photo.setTitle(title);photo.setFileName(fileName);photo.setUuidName(uuidName);photo.setUser(userDao.findByName(user));//持久化Photo实例photoDao.save(photo);return photo.getId();}catch (Exception e){e.printStackTrace();throw new AlbumException("添加相片过程出现异常!");}}@Overridepublic boolean validateName(String name){try{//根据用户名查询对应的User实例User user = userDao.findByName(name);if (user != null){return false;}return true;}catch (Exception e){e.printStackTrace();throw new AlbumException("验证用户名是否存在的过程中出现异常!");}}@Overridepublic List<PhotoHolder> getPhotoByUser(String user, int pageNo){try{List<Photo> pl = photoDao.findByUser(userDao.findByName(user), pageNo);List<PhotoHolder> result = new ArrayList<PhotoHolder>();for (Photo p : pl){result.add(new PhotoHolder(p.getTitle(), p.getFileName(), p.getUuidName()));}return result;}catch (Exception e){e.printStackTrace();throw new AlbumException("查询相片列表过程中出现异常!");}}}

3)        其它业务的父类函数。

public class BaseServlet extends HttpServlet
{protected AlbumService as;/*** 图片放大时,需要要给服务 提示字符*/protected static String IMG_CHANGE_STYLE_BIG = "big";/*** 图片缩小需要给服务器的提示字符*/protected static String IMG_CHANGE_STYLE_SMALL = "small";/*** 放大的比例*/protected static double IMG_CAHNGE_BIG_FLOAT = 1.1f;/*** 缩小的比例*/protected static double IMG_CHANGE_SMALL_FLOAT = 0.9f;/*** 最大放大的比例*/protected static double IMG_CHANGE_BIG_BIG_FLOAT = 1000.0f;/*** 最小缩小的宽度比例*/protected static double IMG_CHANGE_SMALL_WIDTH = 100.0f;/*** 最小缩小高度比例*/protected static double IMG_CHANGE_SMALL_height = 300.0f;/*** 图片默认的宽度*/protected static double IMG_WIDTH = 500f;/*** 图片默认的高度*/protected static double IMG_HEIGHT = 400f;/*** 定义初始化方法,获取Spring容器的引用*/@Overridepublic void init(ServletConfig config) throws ServletException{super.init(config);ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(getServletContext());as = (AlbumService)ctx.getBean("albumService");}}

4)        其它的具体调用父类的类,这里竹笔者就不给出了,读者可以自己看源码。

电子相册系统(二)业务层设计相关推荐

  1. 一文正确理解 分层架构系统 的接入层设计,以及接入层设计常见的问题和解决方案(雪崩、降级、限流、熔断)

    分层架构系统之接入层 分布式架构设计之接入层 1.定义 2.优势 3.技术方案 3.1.考虑的问题(负载均衡和高可用) 3.2.设计方式 3.2.1.单个IP地址接入 3.2.2.多个IP地址随机接入 ...

  2. 直播系统---从数据层设计的角度看映客直播系统架构变化

    一.映客直播发展历程 映客直播是2015年5月份成立的一家公司,在移动直播领域,映客算是比较早成立的公司了.如上图中所展示的就是映客APP上的一些页面,左图展示的是映客APP中的热门内容,这里是某一个 ...

  3. 【C#+SQL Server+打印组件】实现电商快递单打印系统 二:数据库设计与开发环境(附源码和资源)

    需要源码和资源请点赞关注收藏后评论区留言私信~~~ 一.系统开发环境要求 开发快递单打印精灵项目的计算机需要满足以上条件 操作系统:windows7以上 开发环境:Visual Studio 2022 ...

  4. 中台之上(十一):企业级业务架构设计的“五难”

    我们简单回顾一下,以业务架构的发展过程和对业务模型基本介绍作为开始,结合笔者的工作经验和自身一些不成熟的理解,在业务架构设计方面陆续讲到了企业战略解读.企业组织结构的影响.如何划分业务领域和流程.与流 ...

  5. 后台开发技术--接入层设计

    通常把跟客户端直连的服务器称为接入服务器,一个或多个接入服务器构成的接入层.接入层有以下功能: 维护与客户端之间的网络连接,管理客户端的网络状态. 接收客户端请求,将请求转发到业务层,转发业务层发给客 ...

  6. 中台之上(十三):探讨支持组装式开发的业务架构设计方法

    "颗粒度"问题 面向服务的设计一直都有一个话题,就是服务的"颗粒度"问题,无论是SOA还是微服务,都很难把握颗粒度.首先,SOA在实际操作中并不是真的关心颗粒度 ...

  7. 控制层远程调用业务层_如何应用数据访问服务层分离系统中的业务层和持久层之间耦合关系...

    软件项目实训及课程设计指导--如何应用数据访问服务层分离业务层和持久层之间耦合关系 作者已经在本系列文章<软件项目实训及课程设计指导--如何正确地设计J2EE应用系统持久层中的各个组件结构及关系 ...

  8. 中台之上(三):战略和组织结构,业务架构设计中不应被忽视的关键因素

    业务架构的起点:解读企业战略 \n 业务架构最大的特点就是要从企业整体视角出发思考问题,要有居高临下的俯视视角,时刻有一张企业整体的业务能力地图印在脑子里,而企业的业务能力是服务于业务目标的,业务目标 ...

  9. 中台之上(十):业务架构设计“笨重”,它能跟敏捷沾边吗?

    传说中和现实中的双模开发 \n "天下武功唯快不破".电影<功夫>中火云邪神这句台词可谓深得互联网时代竞争的要旨,也不乏业内人士常常感叹,一个产品的成功可能只是领先对手 ...

  10. 微服务架构案例(02):业务架构设计,系统分层管理

    本文源码:GitHub·点这里 || GitEE·点这里 更新进度(共6节): 01:项目技术选型简介,架构图解说明 02:业务架构设计,系统分层管理 一.业务架构设计 1.基础概念 服务的架构设计决 ...

最新文章

  1. PHP数据库链接类(PDO+Access)
  2. 网站优化关键词如何分类看好这四种!
  3. golang中的strings.ToTitle
  4. 【OpenCV入门学习笔记2】:Mat对象
  5. 虾扯蛋之函数防抖和节流
  6. nodejs 安装后 npm-v 无效,node全局环境配置
  7. java 三个点_Java,参数中的3个点
  8. 机器学习:算法视角pdf_何时使用不同的机器学习算法:简单指南
  9. Fiddler设置抓一个域名下个包
  10. 外网访问内网Oracle数据库
  11. 蓝色妖姬 t3200 linux连接
  12. 硬盘盒刷固件使其不休眠
  13. SS LSTM全文翻译
  14. Scratch3.0创意编程(基础篇):第11课 智能小车
  15. discuz模板机制
  16. kalibr源码解析之fov模型重投影误差计算
  17. Python 用均匀分布验证中心极限定理
  18. Android开发 期末复习
  19. python 证书-python+证书
  20. vue中鼠标移入移出事件种类以及区别

热门文章

  1. localStorage、cookie的使用总结
  2. 好用的eclipse快捷键
  3. 字符串的首地址做形参不能将变化传递回主函数
  4. 关于JavaScript中变量的相互引用
  5. Security+ 学习笔记18 密码分析攻击
  6. OSPF路由控制原理与实验
  7. Redis详解(四)——配置文件详解
  8. Python3实现文件名排序
  9. 从 Vue 的视角学 React(二)—— 基本语法
  10. XenServer 6.5实战:Creating a Storage Repository (CIFS)