图书馆项目----介绍相关逻辑
去下载源码的同学给个star哦~
首先我先介绍一下我写的这个项目,由于是我一个人负责的全栈,而且写项目的时间很短,只有一周,这一周我还要回家,家里还有各种饭局,
所以真正写项目的时间很少,而且我计划就是两周时间,一周写项目,一周学习写博客,正好卡点,有一些我想实现的功能也并没有来的及实现,
所以可能有点简陋。
我的项目是做一个图书馆管理系统,我这个系统的健壮性没有那么强,我的系统是属于那种希望借书的同学们都是遵纪守法的好少年,不搞破坏hhh,
他主要实现了用户的借书和查看书功能,和管理员的管理图书的功能。
项目亮点就是实现了分页的功能,可以统计有多少种书以及实现分页,可以跳转到指定的一页。
我这个项目是用java2E 去实现的,而这也正好是我这学期要学习的内容,首先来介绍一下java2e的逻辑:
项目还基于了MVC概念:
也许我的项目功能不是亮点,但是代码的耦合度很低,实现了内聚和解耦,如果想添加功能可以很方便的实现,
因为我使用了里氏代换原则这个设计模式的思想,和工厂模式的思想,如果想添加功能不用改变源代码,只需要添加方法就可以了,体现了封闭开放原则。
我先放出来我的代码的一个亮点:
public static <T> T copyParamToBean(Map value, T bean) { try { //使用: Bean bean = WebUtils.copyParamToBean(req.getParameterMap(),new Bean()) BeanUtils.populate(bean,value); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return bean; }
这是WebUtils里面的一种方法,可以把request域得到的参数注入到Bean对象中。
这里的参数明明也可以是req对象,但是我却用了Map,这是因为如果我们用req的话,那么在Dao层和Service层就无法使用了,
就增加了代码的耦合,如果用Map那么在调用方法的时候就可以传入req.getParameterMap(),这样在其他层也可以传入Map对象使用了。
我的代码使用了大量的反射和泛型
比如在BaseServlet中:
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setCharacterEncoding("UTF-8"); req.setCharacterEncoding("UTF-8"); String action = req.getParameter("action"); try { //获取action业务鉴别字符串,获取相应的业务,方法反射对象 Method method = this.getClass().getDeclaredMethod(action,HttpServletRequest.class,HttpServletResponse.class); //通过反射进行调用 method.invoke(this,req,resp); } catch (Exception e) { e.printStackTrace(); } }
我们知道改变传入的action的值,就可以实现调用同名方法。
不行了我受不了了,我要去学JavaSE了。