秒杀Servlce接口设计

1、创建service包,创建SecKillServlce业务接口

SecKillServlce.Java

package org.secKill.service;
/*
* 业务接口:站在“开发者”的角度设计接口
* 三个方面:方法定义粒度,参数,返回类型(return 类型/异常)*/

import org.secKill.dto.Exposer;
import org.secKill.dto.SecKillExecution;
import org.secKill.entity.SecKill;
import org.secKill.exception.RepeatKillException;
import org.secKill.exception.SecKillCloseException;
import org.secKill.exception.SecKillException;

import java.util.List;

/**
 * Created by 谭雪娇 on 2017/5/5.
 */
public interface SecKillService {
    /*
    * 查询所有秒杀记录
    * @return
    * */
    List<SecKill> getSecKillList();
    /*
    * c查询单个秒杀记录
    * @Param SecKillId
    * @return
    * */
    SecKill getById(long secKillId);
    /*
    * 秒杀开启时输出秒杀接口地址,
    * 否则输出系统时间
    * @param secKillId
    * */
    Exposer exportSecKillUrl(long secKillId);
    /*
    * 执行秒杀操作
    * @param secKillId
    * @param userPhone
    * @param md5*/
    SecKillExecution executeZSecKill(long secKillId, long userPhone, String md5) throws SecKillException,RepeatKillException,SecKillCloseException;
}

建立dto包,创建暴露秒杀接口dto(数据传输层)

Exposer.java

package org.secKill.dto;

/**
 * Created by 谭雪娇 on 2017/5/5.
 * 暴露秒杀接口DTO
 */
public class Exposer {
    //是否开启秒杀
    private boolean exposed;
    //一种加密措施
    private String md5;
    //id
    private long secKillId;
    //开始时间
    private long start;
    //结束时间
    private long end;

public Exposer(boolean exposed, String md5, long secKillId) {
        this.exposed = exposed;
        this.md5 = md5;
        this.secKillId = secKillId;
    }

public Exposer(boolean exposed, String md5, long start, long secKillId, long end) {
        this.exposed = exposed;
        this.md5 = md5;
        this.start = start;
        this.secKillId = secKillId;
        this.end = end;
    }

public Exposer(boolean exposed, long secKillId) {
        this.exposed = exposed;
        this.secKillId = secKillId;
    }

public boolean isExposed() {
        return exposed;
    }

public void setExposed(boolean exposed) {
        this.exposed = exposed;
    }

public String getMd5() {
        return md5;
    }

public void setMd5(String md5) {
        this.md5 = md5;
    }

public long getSecKillId() {
        return secKillId;
    }

public void setSecKillId(long secKillId) {
        this.secKillId = secKillId;
    }

public long getStart() {
        return start;
    }

public void setStart(long start) {
        this.start = start;
    }

public long getEnd() {
        return end;
    }

public void setEnd(long end) {
        this.end = end;
    }

@Override
    public String toString() {
        return "Exposer{" +
                "exposed=" + exposed +
                ", md5='" + md5 + '\'' +
                ", secKillId=" + secKillId +
                ", start=" + start +
                ", end=" + end +
                '}';
    }
}

创建包enums,创建枚举类型SecKillStateEnum.java使用枚举表述数据常量字典

SecKillStateEnum.java

package org.secKill.enums;

/**
 * 使用枚举表述常量数据字典
 *
 * @author yan
 */
public enum SecKillStateEnum {

SUCCESS(1, "秒杀成功"), END(0, "秒杀结束"),

REPEAT_KILL(-1, "重复秒杀"),

INNER_ERROR(-2, "系统异常"),

DATA_REWRITE(-3, "数据篡改");

private int state;

private String stateInfo;

private SecKillStateEnum(int state, String stateInfo) {
        this.state = state;
        this.stateInfo = stateInfo;
    }

public int getState() {
        return state;
    }

public String getStateInfo() {
        return stateInfo;
    }

public static SecKillStateEnum stateOf(int index) {
        for (SecKillStateEnum state : values()) {
            if (state.getState() == index) {
                return state;
            }
        }
        return null;
    }

}

在dto包内创建封装秒杀执行后结果类SecKillExecution.java

package org.secKill.dto;

import org.secKill.entity.SuccessKilled;
import org.secKill.enums.SecKillStateEnum;

/**
 * Created by 谭雪娇 on 2017/5/5.
 * 封装秒杀执行后结果
 */
public class SecKillExecution {
    private long secKillId;
    //秒杀执行结果状态
    private int state;
    //状态标识
    private String stateInfo;
    //秒杀成功对象
    private SuccessKilled successKilled;

public SecKillExecution(long secKillId, SecKillStateEnum stateEnum , SuccessKilled successKilled) {
        this.secKillId = secKillId;
        this.state = stateEnum.getState();
        this.stateInfo=stateEnum.getStateInfo();
        this.successKilled=successKilled;

}

public SecKillExecution(long secKillId,SecKillStateEnum stateEnum) {
        this.secKillId = secKillId;
        this.state =stateEnum.getState();
        this.stateInfo = stateEnum.getStateInfo();
    }

public long getSecKillId() {
        return secKillId;
    }

public void setSecKillId(long secKillId) {
        this.secKillId = secKillId;
    }

public int getState() {
        return state;
    }

public void setState(int state) {
        this.state = state;
    }

public String getStateInfo() {
        return stateInfo;
    }

public void setStateInfo(String stateInfo) {
        this.stateInfo = stateInfo;
    }

public SuccessKilled getSuccessKilled() {
        return successKilled;
    }

public void setSuccessKilled(SuccessKilled successKilled) {
        this.successKilled = successKilled;
    }
}

创建包exception创建三个异常

创建SecKillException.java 秒杀执行异常

package org.secKill.exception;

/**
 * Created by 谭雪娇 on 2017/5/5.
 */
public class SecKillException extends RuntimeException{
    public SecKillException(String message){super(message);}
    public SecKillException(String message,Throwable cause){super(message,cause);}
}

重复秒杀异常RepeatKillException.继承SecKillException.java

package org.secKill.exception;

import org.secKill.dto.SecKillExecution;
import org.secKill.entity.SuccessKilled;
import org.secKill.enums.SecKillStateEnum;

/**
 * Created by 谭雪娇 on 2017/5/5.
 */
public class RepeatKillException extends SecKillException{
    public RepeatKillException(String message) {
        super(message);
    }

public RepeatKillException(String message, Throwable cause) {
        super(message, cause);
    }
}

创建SecKillException.java,表示秒杀关闭异常

package org.secKill.exception;

/**
 * Created by 谭雪娇 on 2017/5/5.
 * 秒杀关闭异常
 */
public class SecKillCloseException extends SecKillException {
    public SecKillCloseException(String message) {
        super(message);
    }

public SecKillCloseException(String message, Throwable cause) {
        super(message, cause);
    }
}

秒杀Servlce接口设计的更多相关文章

  1. 高并发秒杀系统--Service接口设计与实现

    [DAO编写之后的总结] DAO层    -->    接口设计 + SQL编写 DAO拼接等逻辑    -->    统一在Service层完成 [Service层的接口设计] 1.接口 ...

  2. SSM实战——秒杀系统之Service层接口设计与实现、Spring托管、声明式事务

    一:Service层接口设计 准备工作:新建三个包:service包.exception包.dto包,分别用来存放业务接口.自定义异常类.dto类. 1:定义接口 package org.myseck ...

  3. 数据仓储之DLL层接口设计

    一.接口设计 1.1. IBaseRepository.cs public interface IBaseRepository<T> { T Add(T entity); bool Upd ...

  4. RESTful接口设计原则/最佳实践(学习笔记)

    RESTful接口设计原则/最佳实践(学习笔记) 原文地址:http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api 1 ...

  5. Web API接口设计经验总结

    在Web API接口的开发过程中,我们可能会碰到各种各样的问题,我在前面两篇随笔<Web API应用架构在Winform混合框架中的应用(1)>.<Web API应用架构在Winfo ...

  6. Verilog学习笔记简单功能实现(七)...............接口设计(并行输入串行输出)

    利用状态机实现比较复杂的接口设计: 这是一个将并行数据转换为串行输出的变换器,利用双向总线输出.这是由EEPROM读写器的缩减得到的,首先对I2C总线特征介绍: I2C总线(inter integra ...

  7. 优秀的API接口设计原则及方法(转)

    一旦API发生变化,就可能对相关的调用者带来巨大的代价,用户需要排查所有调用的代码,需要调整所有与之相关的部分,这些工作对他们来说都是额外的.如果辛辛苦苦完成这些以后,还发现了相关的bug,那对用户的 ...

  8. atitit.基于http json api 接口设计 最佳实践 总结o7

    atitit.基于http  json  api 接口设计 最佳实践 总结o7 1. 需求:::服务器and android 端接口通讯 2 2. 接口开发的要点 2 2.1. 普通参数 meth,p ...

  9. App接口设计

    关于APP接口设计 http://blog.csdn.net/gebitan505/article/details/37924711/

随机推荐

  1. DlgResToDlgTemplate 的代码,提取EXE中的资源,然后转化成C的字符串数组

    代码来源:https://www.codeproject.com/Articles/13330/Using-Dialog-Templates-to-create-an-InputBox-in-C #i ...

  2. nginx windows安装基础

    nginx在 window上运行需要1.17.3以上. 官方文件https://nginx.org/en/docs/windows.html nginx启动: 1:进入安装目录,双击nginx.exe ...

  3. 利用Python进行windows系统上的图像识别与点击(Mac OS系统也可以)

    系统环境: 1.安装了python 2.安装了pyautogui模块 windows系统:无需安装依赖模块,在cmd中直接输入pip install pyautogui即可完成安装 Mac OS系统: ...

  4. 【USACO18JAN】MooTube

    原文链接:https://blog.csdn.net/Patrickpwq/article/details/86656456 给定一棵n个点的树(n=1e5),有边权, 两点间距离定义为两点路径上的 ...

  5. 20190905 Lombok常用注解

    Lombok常用注解 val 用于声明类型,将从初始化表达式推断出类型,仅适用于局部变量和foreach循环,而不适用于字段.声明的局部变量为final变量. Java自带类型推断随着JDK版本提升越 ...

  6. .Net core 3.0 SignalR+Vue 实现简单的即时通讯/聊天IM (无jq依赖)

    .Net core 中的SignalR JavaScript客户端已经不需要依赖Jquery了 一.服务端 1.nuget安装 Microsoft.AspNetCore.SignalR 2.在star ...

  7. linux下的dd命令使用详解

    一.dd命令的解释 dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. 注意:指定数字的地方若以下列字符结尾,则乘以相应的数字:b=512:c=1:k=1024:w=2 参数注释: 1. ...

  8. Java-Lambda表达式第一篇认识Lambda表达式

    1.Lambda表达式时Java 8新增的特性.Lambda表达式支持将代码块作为方法参数,Lambda表达式允许使用更简洁的代码创建只有一个抽象方法的接口(即函数式接口)的实例. 2.当使用Lamb ...

  9. 《剑指offer》面试题17 合并两个排序的链表 Java版

    我的方法:新初始化一个链表头,比较两个链表当前节点的大小,然后连接到该链表中.遍历两个链表直到null为止. public ListNode merge(ListNode first, ListNod ...

  10. python学习第四十三天生成器和next()关联

    我们在用列表生成式的时候,如果有一百万的数据,内存显然不够用,这是python想要什么数据,就生产什么数据给你,就产生了生成器,下面简单讲述生成器用法 1,生成器的用法 a=([a*a for a i ...