接上篇的新闻发布系统设计思路(域模型)之后,我把相关dao的设计和逻辑层的相关设计思路发上来,请大家一起看看还有什么需要改进的地方.
dao作为域模型的一部分,被与单独的domain分开成单独的数据访问对象,并分别对应域模型的四个数据模型对象.分别为articleDao,categoryDao,articleTopTypeDao,和userDao.其中articleDao和categoryDao为主要的dao,其他的还等待扩展或者只是一个简单的占位点.
#-------------------------------------
articleDao(文章数据访问对象)
java 代码
- public interface IArticleDAO {
-
-
-
- public Article get(Serializable s);
-
-
-
-
- public void delete(Article s);
-
-
-
-
-
- public void update(Article article);
-
-
-
-
-
- public void save(Article article);
-
-
-
-
- public Article getArticleByPathMarkAndPageCurrentIndex(String pathMark, int pageCurrentIndex);
-
-
-
-
- public List<Article> getArticleListByPathMark(String pathMark);
-
-
-
-
- public List<Article> getArticleListByCriteria(DetachedCriteria criteria);
-
-
-
-
- public List<Article> getArticleListByCriteria(DetachedCriteria criteria, Page page);
- }
此接口中都是一些常用的操作,包括文章的查询和上下页的翻页等操作.其中getArticleListByPathMark(String pathMark)操作为得到某一篇文章的所有单页文章,因为如果对某一篇文章进行相应更改(如文章页数的改变等),需要对这一篇文章进行相关数据项的删除与添加.而其它操作,如动态查询,目录下文章查询等操作,都委托给getArticleListByCriteria(criteria)和getArticleListByCriteria(cirteria,page)来完成因为一个查询的条件多,如考虑删除条件,目录条件,置顶条件等.
#--------------------
categoryDao(目录数据访问对象)
java 代码
- public interface ICategoryDAO {
-
-
- public Category get(Serializable s);
-
-
- public void delete(Category s);
-
-
- public void update(Category category);
-
-
- public void save(Category category);
-
-
- public List<Category> getCategoryListBySuperCategory(Category category);
-
-
- public boolean hasCategory(Category category);
- }
目录操作相对简单些,除了基本操作,增加getCategoryListBySuperCategory(category)操作,由一目录来得到它的子目录(此处category我只传递了category的主键信息,当然在openSessionInView环境中,可由category.getCategoryList()方法来直接得到子目录,不要这要多发送一条上级目录的查询操作).hasCategory(category)方法,用来处理目录的同名问题,在同一目录下,不允许两个同名的目录存在(当然跨目录是可以的).
其它dao都很简单,就不要再细说了.四个数据访问对象都只对基本的数据操作作了定义,相对来说,更说的操作放在逻辑层(servie)来作.service处理的事也不多,也是把相应操作委托给dao来操作,加上一些自己的逻辑操作.相关接口定义如下(整个系统我只设计了一个servie,此service将所有dao操作聚合在一起)
java 代码
- public interface IService {
-
- public void saveArticle(Article article);
-
-
- public Article getArticle(Serializable s);
-
-
- public Article getArticleByPathMarkAndPageCurrentIndex(String pathMark, int pageCurrentIndex);
-
-
- public List<Article> getArticleListByArticlePathMark(String pathMark);
-
-
- public void updateArticle(Article article);
-
-
- public void updateArticleByArticleTopType(Article article, ArticleTopType articleTopType);
-
-
- public void updateArticleByAudit(Article article, boolean auditFlag);
-
-
- public void updateArticleListByTop(List<Article> articleList, ArticleTopType articleTopType);
-
-
- public void updateArticleListByAudit(List<Article> articleList, boolean auditFlag);
-
-
- public void deleteArticle(Article article);
-
-
- public void deleteFirstArticle(Article article);
-
-
- public void deleteShiftArticle(Article article);
-
-
- public void saveCategory(Category category);
-
-
- public Category getCategory(Serializable s);
-
-
- public void updateCategory(Category category);
-
-
- public void deleteCategory(Category category);
-
-
- public Serializable saveArticleTopType(ArticleTopType articleTopType);
-
-
- public List<Article> queryArticleListByCriteria(DetachedCriteria criterion, Page page);
-
-
- public List<ArticleTopType> getArticleTopTypeListNowValid();
-
-
- public List<Article> queryArticleListByCriteria(DetachedCriteria criteria);
-
-
- public void updateArticleByRecover(Article article);
-
-
- public User getUser(Serializable s);
-
-
- public boolean hasCategory(Category category);
-
-
- public List<Category> getCategoryListBySuperCategory(Category category);
-
-
- public void updateArticleByCategory(Article article, Category category);
-
-
- public void updateArticleListByCategory(List<Article> articleList, Category category);
- }
service将各种操作以更形象的方式提供给action层,并在其中封装数据对象的操作过程,避免action与dao的直接交互.
在service和dao中都出现了一个page对象,这个对象用于页面分页使用.将分页操作放在特定的对象中.分页操作主要涉及到三个方面,每页文章数,当前页数,以及总文章数,其他都可以这三个参数来得到.相应分页对象代码如下:
java 代码
- public class Page {
-
- public Page() {
- }
-
-
- private int currentPage = 1;
-
-
- private int pageSize = 20;
-
-
- private int totalCount;
-
- public int getCurrentPage() {
- return currentPage;
- }
-
- public void setCurrentPage(int currentPage) {
- if(currentPage <= 0)
- return;
- this.currentPage = currentPage;
- }
-
- public int getPageSize() {
- return pageSize;
- }
-
- public void setPageSize(int pageSize) {
- if(pageSize <= 0)
- return;
- this.pageSize = pageSize;
- }
-
- public int getTotalCount() {
- return totalCount;
- }
-
- public void setTotalCount(int totalCount) {
- this.totalCount = totalCount;
- }
-
-
-
-
-
- public int getStartIndex() {
- return (this.currentPage - 1) * this.pageSize;
- }
-
-
- public int getTotalPage() {
- int i = this.totalCount / this.pageSize;
- int j = this.totalCount % this.pageSize;
- return i + (j == 0 ? 0 : 1);
- }
-
-
- public boolean hasPreviousPage() {
- return this.currentPage > 1;
- }
-
-
- public boolean hasNexPage() {
- return this.currentPage < this.getTotalCount();
- }
-
- }
相应操作都是很简单,我也是简单地进行了些操作.由于需求的简单, 使得相应的代码都不是太长,当然逻辑操作也不是太多.在很多的小型系统的开发场合,常常把service这层去掉,而直接以dao层跟action的直接交互.这也未必不是一种方式.(这里我也有想把service层去掉,因为工作确实不多).
dao层代码和service代码放在附件中,请有意思地交流一下.看有什么可以补充的.
分享到:
相关推荐
【新闻发布系统设计思路】主要涉及的是使用Action框架构建一个新闻发布平台的过程。Action是Struts2框架的核心组件,它处理用户请求并控制应用程序的行为。在这个设计思路中,我们可以通过以下步骤来理解系统的构建...
6. **文档编写**:撰写《面向对象程序设计Ⅱ》课程设计说明书,详述系统设计思路、实现细节和测试结果。 在实际操作中,你可能还需要使用到开发工具(如Eclipse或IntelliJ IDEA)、版本控制系统(如Git)、构建工具...
**PPT**可能是项目汇报或教学材料,通常会涵盖系统设计思路、技术选型、模块划分、关键功能的实现细节以及系统测试等内容。通过PPT,我们可以快速概览整个项目的开发流程,理解开发者如何从需求分析到系统实现,再到...
通过以上介绍,我们可以看出这个新闻发布系统是一个综合运用了MVC设计模式和Struts框架的典型Java Web应用,其设计思路清晰,功能完善,适合初学者进行学习和实践。同时,面向接口编程的使用提升了系统的可维护性和...
它能够实时发布新闻、公告、活动信息,帮助用户快速传递信息,提高信息传播效率。本设计文档详细阐述了《Java Web程序设计》课程中的一个项目案例——《新闻发布系统》的设计思路、技术选型以及实现过程。 2 系统...
**课件全代码**:这部分内容可能包含了整个新闻系统的源代码,包括Servlet类、JSP页面、DAO(数据访问对象)层、Service层以及可能的MVC架构实现。通过学习这些代码,学生可以深入理解如何将理论知识应用于实际项目...
这个系统设计并实现了管理员与普通用户的不同权限功能,为新闻管理提供了便捷的平台。 首先,SSH框架是Java Web开发中的常用技术栈。Struts2作为MVC模式的实现,负责处理HTTP请求,协调前端视图与后端业务逻辑;...
设计思路部分会阐述系统的设计理念、主要功能模块划分及实现方式,帮助理解整个系统的运作机制。 8. **源代码**:源代码是实现系统功能的程序,包含了Action类、DAO类、Service类、JSP页面等。通过阅读源代码,可以...
JavaWeb在线考试系统设计与实现是一项重要的毕业设计项目,它响应了在线教育发展的趋势,为教育机构提供了便捷的在线考试工具。系统的核心目标是构建一个高效、安全且易用的平台,涵盖用户管理、题库管理、考试管理...
《基于Java的新闻发布及管理系统详解》 在信息技术飞速发展的今天,新闻管理系统的开发与应用已经成为各类企事业单位不可或缺的一部分。本系统以Java编程语言为基础,旨在实现高效、便捷的新闻发布和管理功能,满足...
开发人员需要编写DAO(Data Access Object)层来与数据库交互,Service层处理业务逻辑,Action层处理请求并调用Service,最后由JSP生成页面响应。 7. **安全与优化**:系统可能还涉及权限控制,确保只有授权用户...
1.3 系统设计思路 1.3.1 分层模型 系统遵循经典的三层架构设计,包括表现层(Web层)、业务逻辑层(Service层)和数据访问层(DAO层)。表现层负责用户交互,业务逻辑层处理业务规则,数据访问层与数据库进行交互。...
《基于Java设计的仓库管理系统设计源码》 在IT行业中,仓库管理系统的开发是一项重要的任务,它涉及到企业的物资流动和库存控制,对于提高运营效率具有关键作用。本系统是基于Java语言进行设计的,Java以其跨平台性...
【标题】"2021-基于Vue+Vant+SSM图书管理系统设计.zip" 提供了一个关于2021年开发的图书管理系统的源码示例,它结合了前端的Vue.js框架、Vant UI组件库以及后端的Spring、SpringMVC和MyBatis(简称SSM)三大框架。...
2. **程序设计思路**: DAO模式的核心思想是通过创建一系列对象来处理与数据库的交互,而不是直接在JSP页面中编写SQL语句。这样可以使得JSP页面专注于展示和控制逻辑,而数据访问则由专门的DAO类负责。这个设计允许...