软件的分层
一般分为
表现层(控制器servlet+视图jsp)
表现层调用service
Service – 业务逻辑层 (调用dao,并且会加入业务逻辑)
下订单:
订单号,支付金额,送货地址 — 订单表
订单号 商品1 单价 数量 折扣 — 订单详情表
订单号 商品2 单价 数量 折扣 — 订单详情表
DAO (data access object) 数据访问层 – 数据的增删改查
订单dao
订单详情dao
实体类 (entity, domain) – 用来存储数据的类,一般来讲,一个类对应数据库的一张表
在页面上按价格查询 minPrice, maxPrice, 但数据库中只有一个价格属性
值对象 (value object-简称VO) – 跟页面打交道的数据存入值对象,不是对应数据库表
注意:
- 不能跨层调用,只能表现层->业务逻辑层->DAO
- 层与层进行调用,最好使用接口,不要直接调用实现类
扩展性差,耦合度高(一层代码的改动会影响到另一层的代码)
菜单树的实现
1) 数据部分(dao,service)
如果菜单的数据量比较大,可以分多次查询
第一次查询一级菜单,之后点击哪个一级菜单再去查询相应的二级菜单
如果菜单的数据量比较小,可以一次全部查询出来
要点:使用map集合建立菜单节点之间的父子关系,提高效率
2) 展现部分
用了一套css框架 bootstrap
要点:找出页面中html的规律,使用标签和el表达式改写原有静态代码
el表达式中要分清属性和方法
${集合.size()} // getSize()
${菜单对象.name} // getName()
empty 检查集合是否为空
not empty 检查集合是否不为空
重用页面代码
<%@ include file=“新页面”%>
针对eshop项目写新页面时,复制/jsp/include/template.jsp, 根据自己需要改动中间部分即可