闲杂小记(二)

广告弹窗后台管理:

代码修改,新增两个字段,新增一张表


新增需求:

在advert_html表中添加两个字段:pageId和position,由这两个字段确定广告所在的位置,新增广告位置表advert_position,用来确定广告位置。


收获:

1.所有逻辑都放在service层处理:

2.所有从页面传回来的数据都不可信,需要进行一次判断:

一般判断是非为null

if (null != page) {
    Date startTime = page.getStart();
    Date endTime = page.getEnd();
    Integer status = page.getStatus();

list一般用null和isEmpty()来判断

if (dataList != null && !dataList.isEmpty()) { TODO: 16/7/22
    dtoList = new ArrayList<AdvertHtmlDto>(dataList.size());
    dtoList = entiyListToDtoList(dataList, dtoList); TODO: 16/7/22
}

3.调用对象属性的时候需要判断对象是否为nul,判调用属性的方法时同样需要判断属性是否为null,这样为为了防止出现空指针异常:

if (advertHtml != null) {
            Date beginTime=advertHtml.getBeginTime();
            if(beginTime==null){
                return;
            }

4.用到的固定数值可以设置为常量:

if (null != status && status != Constants.PAGE_RETURN_STATUS_ALL) {
public static int PAGE_RETURN_STATUS_NOTRELEASE = 0;//未发布
public static int PAGE_RETURN_STATUS_ALREADYRELEASE = 1;//已发布
public static int PAGE_RETURN_STATUS_DELETED = 2;//已删除
public static int PAGE_RETURN_STATUS_ALL = -1;//全部

5.需要访问数据库的操作尽可能地放到后面,这样做如果前面的代码报错时该操作就可以不进行,省去了访问数据库的操作:

if (rowCount == 0) {
    return null;
}
page.getPager().setRowCount(rowCount);
page.setSort("ad.begin_time");//设置排序字段
page.getPager().setOrderDirection(false);//设置排序方案

 TODO: 2016/7/21 0021  
List<AdvertHtml> dataList = mapper.queryByList(page);

6.尽可能地把代码抽出来封装到方法中,处理时直接调用方法就好,这样看起来清晰,而且易懂:

if (!dataList.isEmpty()) { TODO: 16/7/22
    dtoList = new ArrayList<AdvertHtmlDto>(dataList.size());
    dtoList = entiyListToDtoList(dataList, dtoList); TODO: 16/7/22
}
private List<AdvertHtmlDto> entiyListToDtoList(List<AdvertHtml> dataList, List<AdvertHtmlDto> dtoList) {
    for (AdvertHtml advertHtml : dataList) {
        AdvertHtmlDto advertHtmlDto = EntiyToDto(advertHtml);
        dtoList.add(advertHtmlDto);
    }
    return dtoList;
}
private AdvertHtmlDto EntiyToDto(AdvertHtml advertHtml) {

    AdvertHtmlDto advertHtmlDto = new AdvertHtmlDto();
    //实体类与DTO数据转换
    advertHtmlDto.setAdvertId(advertHtml.getAdvertId());
    advertHtmlDto.setCreateTime(advertHtml.getCreateTime());
    advertHtmlDto.setUpdateTime(advertHtml.getUpdateTime());
    advertHtmlDto.setType(advertHtml.getType());
    advertHtmlDto.setPicPath(advertHtml.getPicPath());
    advertHtmlDto.setTargetUrl(advertHtml.getTargetUrl());
    advertHtmlDto.setBeginTime(advertHtml.getBeginTime());
    advertHtmlDto.setEndTime(advertHtml.getEndTime());
    advertHtmlDto.setIsDelete(advertHtml.getIsDelete());
    fillDto(advertHtml, advertHtmlDto);

    //逻辑判断
    Date beginTime = advertHtml.getBeginTime();
    if (beginTime == null) {
        return null;
    }
    long getBeginTime = beginTime.getTime();
    long currentTime = new Date().getTime();
    if (currentTime > getBeginTime) {
        advertHtmlDto.setIsDelete(2);
    }
    if (getBeginTime - currentTime < 3600 * 1000) {
        advertHtmlDto.setIsEditable(0);
    } else {
        advertHtmlDto.setIsEditable(1);
    }
    return advertHtmlDto;
}

7.若一个变量需要进行多次方法调用才能得到的话,可以多设几个变量,这样代码不会过长,而且更容易被看懂:

if (advertHtml != null) {
//            long beginTime = advertHtml.getBeginTime().getTime();
            Date beginTime=advertHtml.getBeginTime();
            if(beginTime==null){
                return;
            }
            long getBeginTime=beginTime.getTime();

8.Dao,Entiy,,Dto,Vo认知与理解:

Dao,Entiy:与实体对应,访问数据库:

必须存在

@Data
public class AdvertHtml extends BaseEntity {

    private Long advertId;

    private Date createTime;

    private Date updateTime;

    private Integer type;     //0.图片,1.gif图片.

    private String picPath;     //图片地址.

    private String targetUrl;     //目标网址.

    private Date beginTime; // 开始时间

    private Date endTime; //结束时间

    private Integer isDelete; //状态,是否删除

    private Integer pageId;
    private Integer position;
}

Dto:后台向页面传输数据的载体:

应用场景:需要在页面展示一些实体中并不存在的字段

@Data
public class AdvertHtmlDto extends BasePage {

    private Long advertId;

    private Date createTime;

    private Date updateTime;

    private Integer type;     //0.图片,1.gif图片.

    private String picPath;     //图片地址.

    private String targetUrl;     //目标网址.

    private Date beginTime; // 开始时间

    private Date endTime; //结束时间

    private Integer isDelete; //状态,是否删除

    private Integer isEditable; //状态,是否可编辑
    private Integer pageId;
    private Integer position;
    private String positionName;
    private  Long positionId;
}

Vo:页面向后抬传输数据的载体:

应用场景:页面向后台传入一些数据,但和实体字段可能不一致

@Data
public class AdvertHtmlModelPage extends BasePage {


    private  Boolean deleted;
    private Date start;
    private Date end;
    private Integer status;


}

9.if语句逻辑处理:

尽可能地采用发散性的树状结构思维,不要采用扁平化思维 

业务需求:

按条件查询广告:

页面传入三个字段,用来确定发布时间begintime的范围的开始时间start和结束时间end,发布状态status,确定发布状态的是n当前时间,begintime大于当前时间则为未发布,小于当前时间则为发布

(1).扁平化思维:

 //三个参数
//        if (page.getStatus() != null && startTime != null && endTime != null) {
           /* Date startTime = startTime;
            Date endTime = endTime;
            //之间
            if (nowTime.after(startTime) && nowTime.before(endTime)) {
                if (page.getStatus() == 2) {
                    page.setStart(nowTime);
                }
                if (page.getStatus() == 3) {
                    page.setEnd(nowTime);
                }
            }
            if (nowTime.before(startTime)) {
                if (page.getStatus() == 3) {
                    page.setEnd(nowTime);
//                   throw new Exception("不可能");
                }
            }
            if (nowTime.after(endTime)) {
                if (page.getStatus() == 2) {
                    page.setStart(nowTime);
//                    throw new Exception("不可能");
                }
            }*/
//        }
        //两个参数
/*        if (page.getStatus() != null && startTime != null && endTime == null) {
            Date startTime = startTime;
            if (nowTime.before(startTime)) {
*//*  if (page.getStatus() == 2) {
                }*//*
                if (page.getStatus() == 3) {
                    page.setEnd(nowTime);
//                    throw new Exception("不可能");
                }
            }
            if (nowTime.after(startTime)) {
                if (page.getStatus() == 2) {
                    page.setStart(nowTime);
                }
                if (page.getStatus() == 3) {
                    page.setEnd(nowTime);
                }
            }
        }
        if (page.getStatus() != null && startTime == null && endTime != null) {
            Date endTime = endTime;
            if (nowTime.before(endTime)) {
                if (page.getStatus() == 2) {
                    page.setStart(nowTime);
                }
                if (page.getStatus() == 3) {
                    page.setEnd(nowTime);
                }
            }
            if (nowTime.after(endTime)) {
                if (page.getStatus() == 2) {
                    page.setStart(nowTime);
//                    throw new Exception("不可能");
                }
            }
        }
        //一个参数
        if (page.getStatus() != null && startTime == null && endTime == null) {
            if (page.getStatus() == 2) {
                    page.setStart(nowTime);
            }
            if (page.getStatus() == 3) {
                page.setEnd(nowTime);
            }
        }*/
/*  if (page.getStatus() == null && startTime != null && endTime == null) {
        }
        if (page.getStatus() == null && startTime == null && endTime != null) {
        }*/

(2).发散性思维
      /*  if(null !=   page) {
            Date startTime = page.getStart();
            Date endTime = page.getEnd();
            Integer status = page.getStatus();
            if (null == status) {
            } else if (2 == status) {
                if (null == startTime) {
                    startTime=nowTime;
                } else if (startTime.before(nowTime)) {
                    if (null == endTime) {
                       startTime=nowTime; //3=2,2<now,3=null
                    } else if (endTime.after(nowTime)) {
                        startTime=nowTime;//3=2,2<now,3>now
                    } else {
//                                return null;//3=2,2<now,3<now
                        startTime=nowTime;
                    }
                }
            } else if (3 == status) {
                if (null == startTime) {
                   endTime=nowTime;
                } else if (startTime.before(nowTime)) {
                    if (null == endTime) {
                       endTime=nowTime; //3=3,2<now,3=null
                    } else if (endTime.after(nowTime)) {
                        endTime=nowTime;//3=3,2<now,3>now
                    } else {
                        //3=3,2<now,3<now
                    }
                } else if (startTime.after(nowTime)) {
                    if (null == endTime) {//3=3,2>now,3=null
                       endTime=nowTime;
                    } else if (endTime.after(nowTime)) {//3=3,2>now,3>now
//                    return null;
                        endTime=nowTime;
                    } else {
//                    return null; //3=3,2>now,3<now
                        endTime=nowTime;
                    }
                }
            }
        }*/
(3).精简
      /* if (null == status) {
            } else if (0 == status) {
                if(endTime!=null&&endTime.before(nowTime)){
//                    return null;
                    throw new ServiceException(ResponseCode.SERVICE_EXCEPTION,"不可能");
                }else{
                    if(startTime==null || startTime.before(nowTime)){
                        startTime=nowTime;
                    }
                }
                delete=false;
            }
            else if (1 == status) {
                if(startTime!=null&&startTime.after(nowTime)){
                    throw new ServiceException(ResponseCode.SERVICE_EXCEPTION,"不可能");
//                    return null;
                }else{
                    if(endTime==null || endTime.after(nowTime)){
                        endTime=nowTime;
                    }
                }
                delete=false;
            }
            else if (2 == status) {
                delete=true;
            }else{
                delete=null;
            }*/

(4).最终版

Date nowTime = new Date();
if (null != page) {
    Date startTime = page.getStart();
    Date endTime = page.getEnd();
    Integer status = page.getStatus();
    Boolean delete = null;

    if (null != status && status != Constants.PAGE_RETURN_STATUS_ALL) {
        if (Constants.PAGE_RETURN_STATUS_DELETED == status) {
            delete = true;
        } else {
            delete = false;
            if (Constants.PAGE_RETURN_STATUS_NOTRELEASE == status) {
                if (endTime != null && endTime.before(nowTime)) {
                    return null;
                } else {
                    if (startTime == null || startTime.before(nowTime)) {
                        startTime = nowTime;
                    }
                }
            } else if (Constants.PAGE_RETURN_STATUS_ALREADYRELEASE == status) {
                if (startTime != null && startTime.after(nowTime)) {
                    return null;
                } else {
                    if (endTime == null || endTime.after(nowTime)) {
                        endTime = nowTime;
                    }
                }
            }
        }
    }
    page.setStart(startTime);
    page.setEnd(endTime);
    page.setDeleted(delete);
}
10.mvc新理解

controller与页面一一对应,一个controller与一个service对应,一个service可以拥有多个dao,dao与实体一一对应,实体与数据库表一一对应。实体的字段与数据库表一致,dao层对实体进行增删改查操作,controller接收页面请求调用service,service进行业务逻辑处理并调用dao层相应方法访问数据库,对数据库数据进行访问。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值