# 第07节:简单工厂搭建发奖领域
作者:小傅哥
博客:https://bugstack.cn (opens new window)
沉淀、分享、成长,让自己和他人都能有所收获!
- 分支:210904_xfg_award (opens new window)
- 描述:运用简单工厂设计模式,在
domain/award
搭建发奖领域服务。
# 零、优秀作业
- 小小NPE哪能难得到我呢?@YAMIN (opens new window)
- 简单工厂搭建发奖领域 @一点江南 (opens new window)
- DDD架构和设计模式的实战应用 @AhHao (opens new window)
- 简单工厂模式搭建发奖领域 @BerserkD (opens new window)
- 修改数据库规范、完成发奖领域、用简单工厂模式去获取真正实现派发操作的类 @Chin (opens new window)
- 简单工厂模式搭建发奖领域 @Geroge Liu (opens new window)
- 抽奖系统流程结构梳理 @xbhog (opens new window)
- 在遇到的问题中,梳理流程,debug调试问题 @星期一 (opens new window)
- 遇到一些功能方法暂时没有时间实现的或者是一些问题待解决的,可以使用TODO标签来标识这些地方 @twinkler (opens new window)
- 代码太优雅了,一下子就上头了。@待佳人晚归 (opens new window)
# 一、开发日志
- 下载安装 Navicat Premium 15.0.30 (opens new window)
- 按照 Mysql 库表使用规范调整表字段名称,如
activityId
调整为activity_id
,涉及改造的表包括:activity
、award
、strategy
、strategy_detail
新的建表语句和初始化数据已更新到 doc/assert/sql/lottery.sql (opens new window) - 继续按照 P3C 标准,在 IDEA 插件
Alibaba Java Coding Guidelines
提醒下,修改所有涉及到的领域层、基础层中类、方法、字段的注释信息。 - 【重要】运用简单工厂设计模式,搭建发奖领域服务。介绍:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
# 二、发奖领域服务实现
截止到目前我们开发实现的都是关于 domain
领域层的建设,当各项核心的领域服务开发完成以后,则会在 application
层做服务编排流程处理的开发。例如:从用户参与抽奖活动、过滤规则、执行抽奖、存放结果、发送奖品等内容的链路处理。涉及的领域如下:
# 1. 工程结构
lottery-domain
└── src
└── main
└── java
└── cn.itedus.lottery.domain.award
├── model
├── repository
│ ├── impl
│ │ └── AwardRepository
│ └── IAwardRepository
└── service
├── factory
│ ├── DistributionGoodsFactory.java
│ └── GoodsConfig.java
└── goods
├── impl
│ ├── CouponGoods.java
│ ├── DescGoods.java
│ ├── PhysicalGoods.java
│ └── RedeemCodeGoods.java
├── DistributionBase.java
└── IDistributionGoodsc.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- 关于 award 发奖领域中主要的核心实现在于 service 中的两块功能逻辑实现,分别是:
goods 商品处理
、factory 工厂🏭
- goods:包装适配各类奖品的发放逻辑,虽然我们目前的抽奖系统仅是给用户返回一个中奖描述,但在实际的业务场景中,是真实的调用优惠券、兑换码、物流发货等操作,而这些内容经过封装后就可以在自己的商品类下实现了。