PS:本篇讲的是通用CRUD后端设计,主要是设计的想法,跟代码不相关,故可跳过本篇直接看下一篇代码实现。
在登录功能实现之后,猫哥定睛一看,剩下的好像绝大部分工作都是CRUD。也就是对一些事物的增、删、改、查。
比如人员管理功能,无非就是查看人员(查)、修改人员信息(改)、新增人员(增)、删除人员(删)。
而跟人员管理相关的网页,其实有两个就够额,一个是userManage.jsp,提供人员列表和相关的修改、删除、新增按钮。然后是userUpdate.jsp,提供修改人员、新增人员并保存的界面。
那么整个问题,从逻辑上就抽取成了两个问题,1个是页面跳转的问题,之前我们通过RouteCommand已经实现了,另一个就是增删改查的问题,需要我们接受页面参数之后判断页面请求的意图(是新增、还是删除),然后调用数据库层的接口完成操作,最后跳转到相应页面即可。
有一种很简单的做法,就是全部if判断,对每一种操作定义一个Servlet,然后执行相关数据库操作,然后跳转相应页面。
稍微复杂点的做法,就像我们之前的LoginServlet-LoginCommand 和 RouteServlet-RouteCommand一样,负责一部分的功能:登录、跳转。
那么即然CRUD的工作都是类似的,那么能不能交给同样的Servlet-Command模块处理呢,猫哥尝试之,并命名为ActionServlet-ActionCommand。
首先我们规范所有的跟CRUD请求相关的url写法为/HomeworkSystem/AcitonServlet?method=XXX&entity=YYY&id=ZZZ
。具体规则如下:
OK,我们设计所有CRUD请求的实现逻辑如下(以人员管理为例):
1,查看点击人员管理菜单,显示人员列表和相应操作按钮,请求为:/HomeworkSystem/AcitonServlet?method=view&entity=User处理为:request的Attribute里面添加人员列表变量entityList跳转网页为:userView.jsp,负责显示人员列表(注意所有跳转为内嵌跳转,跳转到的网页显示在index.jsp也右侧内容区域)2,新增点击新增,请求为:/HomeworkSystem/AcitonServlet?method=add&entity=User处理为:无跳转网页为:userUpdate.jsp3,信息修改点击修改,请求为:/HomeworkSystem/AcitonServlet?method=edit&entity=User&id=123处理为:将id对应用户信息放入request的Atrribute,名为entityEdit跳转网页为:userUpdate.jsp,需要加载待修改客户信息4,保存新增/保存修改点击保存,请求为:/HomeworkSystem/AcitonServlet?method=save&entity=User&id=123处理为:判断id是否"",完成新增/修改的保存跳转:直接调用1查看5,删除点击删除,请求为:/HomeworkSystem/AcitonServlet?method=delete&entity=User&id=123处理为:删除id对应用户跳转:直接调用1查看OK,其实基本原则就一条,即然我们所有的实体对应的数据库表,都要完成CRUD操作,而且规则一致。根据计算机编程“避免重复”的原则,即可尝试简化之,如果在简化的过程中有问题,说明当初的设计就是有问题的,需要修改以便简化顺利完成。所以猫哥认为,大可不必为了设计而设计,修改不自然的设计是学习如何完善设计的好办法。
新闻热点
疑难解答