1.基础秒杀项目

一、整体架构

java 领域建模设计 注意 java领域模型设计实例_领域模型


java 领域建模设计 注意 java领域模型设计实例_领域模型_02

领域模型 就是专门负责某方面的业务的pojo,比如一个User,具有注册,使用,注销这样的一个生命周期。但关联到数据层可能是用户密码表、属性表等等多个数据库表。

贫血模式 就是不赋予领域模型方法,只给领域模型基本的属性和set get 方法,让其注册、注销等操作由service来完成。 相反的就是 充血模式,在领域模型中把具体操作方法全部写入。

领域模型

就是专门负责某方面的业务的pojo,比如一个User,具有注册,使用,注销这样的一个生命周期。

但关联到数据层可能是用户密码表、属性表等等多个数据库表。

贫血模式

就是不赋予领域模型方法,只给领域模型基本的属性和set get 方法,让其注册、注销等操作由service来完成。

相反的就是 充血模型,在领域模型中把具体操作方法全部写入。

二、具体模型

java 领域建模设计 注意 java领域模型设计实例_java 领域建模设计 注意_03

注意:
用户密码表,单独分出一个表。
密码应当分开存储,防止在查询用户信息时,把密码也直接查询出来,会容易被攻击和进行恶意操作
库存表也是单独表,因为库存操作很频繁,频繁给一整行添加行锁影响效率。
单独分出库存表,方便以后进行分库分表(以尾号取模)。

三、类图

java 领域建模设计 注意 java领域模型设计实例_高并发架构_04

四、小知识点

ex _instanceof _BusinessException

判断ex是否是BusinessException的具体实例。

不小心搞崩了服务器上的mysql,原因是硬盘空间满了…

删一删其他文件,重启mysql就好了…

Spring自动装配

@Autowired
private UserService userService;

但是UserService明明只是一个没有方法实现的接口啊,看来Spring应该可以自动找到UserServiceImp实现类吧…

ORM

Object Relational Mapping对象关系映射
通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 这也同时暗示着额外的执行开销。
常见的ORM框架有:Hibernate(JPA的实现)、TopLink、Castor JDO、Apache OJB等。

Lambda表达式与Stream Api

/**
     * itemDO:从数据库中 商品信息表 查询出来的Data Object
     * itemStockDO:从数据库中 库存表 查询出来的Data Object
     * itemModel:商品的业务模型,集成业务的相关DO数据
     *
     * 使用stream api将itemDOList,根据其内的id查询出itemStockDO,与itemStockDO一起转换成itemModel
     * 最后通过.collect(Collectors.toList())转换为list对象
     * @return
     */
    @Override
    public List<ItemModel> listItem() {
        List<ItemDO> itemDOList = itemDOMapper.listItem();
        List<ItemModel> itemModelList =  itemDOList.stream().map(itemDO -> {
            ItemStockDO itemStockDO = itemStockDOMapper.selectByItemId(itemDO.getId());
            ItemModel itemModel = this.convertModelFromDataObject(itemDO,itemStockDO);
            return itemModel;
        }).collect(Collectors.toList());
        return itemModelList;
    }

Mysql中的datetime

0000-00-00 00:00:00