文档章节

订单创建模块的领域模型设计

石雨雾风
 石雨雾风
发布于 2014/09/12 11:11
字数 1889
阅读 315
收藏 0

##关于创建订单功能的文档

##创建订单需要完成哪些功能?

  • 通过app_id,user_id,orderData(json)创建订单
  • 限量的判断与创建,并限量,主要是针对imsi,imei,phone
  • 过滤限量白名单用户,检查限量的用户
  • 限额的检查,支付等级的更新,黑名单,L0,L1,L2(10分钟,日,月)
  • 生成订单号,并考虑对DPAY,KYSTORE,UPMPPAY的特殊处理(订单号:签名)

##创建订单规则 a.限量配置:{M0:{imei:{日更换,月更换,绑定超量},imsi:{日更换,月更换,绑定超量},phone:{日更换,月更换,绑定超量}},M1:{imei:{日更换,月更换,绑定超量},imsi:{日更换,月更换,绑定超量},phone:{日更换,月更换,绑定超量}},M2:{imei:{日更换,月更换,绑定超量},imsi:{日更换,月更换,绑定超量},phone:{日更换,月更换,绑定超量}}}

b.等级-限额配置:关于游戏账号限额 L0/L1/L2/L3/L4 = {十分钟限额、日限额、月限额};关于imsi号限额, L0/L1/L2/L3/L4 = {十分钟限额、日限额、月限额};关于手机号限额, L0/L1/L2/L3/L4 = {十分钟限额、日限额、月限额}

c.订单号长度配置:{支付渠道:订单号长度}

##创建订单的领域模型(实体,值对象,服务,仓库)

###1. 订单 (实体/值对象)

###2. 订单的服务

###3. 订单的规则引擎

###4. 各个实体/值对象的Repository(在演化中与Infrastructure交互行为)


##创建订单的对象演化 ###1. 订单 (订单信息用于存储订单的基本信息)

  • 实体(orderid, appid, userid, channel_id, providerid, status, finished, phonenum, created_at, updated_at)和值对象(orderid,app_id_stat,orderData,orderResult,client_callback,request_data,response_data,created_at,updated_at)

  • 行为:存储订单信息;获得订单号,订单游戏id,玩家账号,订单状态(需要考虑状态值),client_callbackdata信息,创建时间,更新时间等基本信息;更新订单状态;更新更新时间;更新client_callbackdata信息;此订单是否已处理

  • 属性:appid,userid,orderdata,channelid,providerid,订单状态(status),client_callbackdata,创建时间,更新时间,phnoenum,finished

###2. 订单的服务(提供创建订单服务的处理)

  • 行为:对象之间的逻辑处理;提供了外部thrift的接口和创建订单领域内的调度及封装;如:创建订单等thrift相关;获得规则引擎;创建订单;

###3. 订单的规则引擎(备注:规则引擎负责管理下属的所有规则,最终只是返回一个check的结果给订单服务,通知服务是否可以创建订单)

  • 行为:获得配置规则;检查是否可以生成订单号

###4. 支付渠道基类(具有各种支付渠道的子类)//主要功能:按照支付渠道规则获取订单长度;按照支付渠道规则选取订单生成算法;按照支付渠道生成签名(调用签名对象里面的方法来实现)

  • 行为:获得签名对象;生成订单算法(子类可以覆盖它);根据渠道名称检查是否需要签名
  • 属性:支付渠道,订单号,订单号长度(数据库中不需要存储)

###5. 签名基类(具有各种具体类型签名的子类)

  • 行为:生成签名算法(具体在各子类中);创建签名对象;
  • 属性:渠道,签名

###6. 支付消费额(根据订单信息管理用户,imsi,phone的近期消费额)(备注:当数据规模达到一定数量级时,采用分表的策略)

  • 行为:按规则初始化对象;更改更新时间;返回用户日、月、10分钟消费额、总消费额;获取此用户的支付额度(前七天的每天支付额和总额,此行为与等级相关);更新Json对象(7天内各天的消费额、总消费额、月消费额);**备注:**10分钟模块设置为可开关方式,分表读取
  • 属性:appid,创建时间,更新时间,消费类型(游戏账号,imsi,phone),该消费类型的值(游戏账号,imsi值,phone值),{sp总消费额:sp金额, sp月消费额:sp金额, 第一天:sp金额, 第二天:sp金额, 第三天:sp金额, 第四天:sp金额, 第五天:sp金额, 第六天:sp金额, 第七天:sp金额} ,日消费额(验证订单后的实时更新) ###7. 限额等级(根据该订单信息得到imsi等级、phone等级和账号等级;更新等级;只限于短信支付)L0/L1/L2/L3/L4
  • 行为:根据用户id获取所有等级(以最低等级为玩家的支付等级);更新phone,imsi和账号(sp)等级;按规则初始化对象,创建用户等级;等级是否被操作
  • 属性:appid, 消费类型(游戏账号,imsi,phone),该消费类型的值(游戏账号,imsi值,phone值),对应等级; 创建时间,更新时间;用户用过的所有SP(支付方式)(Json描述),等级操作状态(系统、运营、自动脚本),等级操作时间,等级操作变化(L2->L0)

###8. 用户支付更换量(根据订单得到该用户现有的更换量)

  • 行为:返回用户imei日、月更换量;返回用户imsi日、月更换量;返回用户手机号日、月更换量;更新日Json和月Json;更新更新时间;创建用户更换量并按规则初始化;
  • 属性:appid,userid,{imei:{当日:{imei值a,imei值b,...,imei值c}}, imsi:{当日:{imsi值a,imsi值b,...,imsi值c}}, phone:{当日:{phone值a,phone值b,...,phone值c}}}(日Json),{imei:{当月:{imei值a,imei值b,...,imei值c}}, imsi:{当月:{imsi值a,imsi值b,...,imsi值c}}, phone:{当月:{phone值a,phone值b,...,phone值c}}}(月Json),创建时间,更新时间 ###9. 绑定超量(imei\imsi\phone三者的用户id;三者和用户id之间是多对多的关系,但此处只考虑1对多,即计算1个imeinum\imsinum\phonenum对应多个用户id)备注:白名单不计入绑定量
  • 行为:返回相应类型(imei\imsi\phone)的绑定值(imeinum\imsinum\phonenum)的对应游戏的绑定量;创建绑定超量并按规则初始化;更新各类型绑定量
  • 属性:绑定类型(imei\imsi\phone),绑定值(imeinum\imsinum\phonenum),{zhajinhua : {用户id, 用户id}, laohuji : {用户id, 用户id}}(用户Json),创建时间,更新时间 ###10. 限量的黑白名单
  • 行为:获得用户的限量黑白名单;修改/新增用户限量黑白名单;更新操作时间;
  • 属性:用户id,appid,用户限量标识(M0\M1\M2,M0:黑,M1:正常限制,M2:白),创建时间,更新时间,黑白名单的操作状态(系统、运营、自动脚本),操作时间,操作变化(M1->M0)

###11. 限制的原因(用户的(日/月)更换量和绑定超量,限额等限制的集合),且等级与原因紧密关联

  • 行为:获得限制原因;设置限制原因;
  • 属性:用户id,限制原因{限量:reason, 限额:reason},创建时间,更新时间

###12. 配置管理(根据订单信息读取本地的限制配置文件)

  • 行为:初始化并读取限量标准配置对象;返回配置文件的配置对象;热更新配置文件;获得配置对象
  • 属性:配置文件路径、配置类型、整个文件的配置对象;

© 著作权归作者所有

石雨雾风
粉丝 1
博文 1
码字总数 1889
作品 0
武汉
程序员
私信 提问
可以落地的DDD到底长什么样?

领域驱动设计的概念   大家都知道软件开发不是一蹴而就的事情,我们不可能在不了解产品(或行业领域)的前提下进行软件开发,在开发前通常需要进行大量的业务知识梳理,然后才能到软件设计的...

阿豪聊干货
2018/07/30
0
0
可以落地的DDD设计到底长什么样?

领域驱动设计的概念 大家都知道软件开发不是一蹴而就的事情,我们不可能在不了解产品(或行业领域)的前提下进行软件开发,在开发前通常需要进行大量的业务知识梳理,然后才能到软件设计的层面...

阿豪聊干货
2018/07/30
0
0
面向对象架构设计流程

引言 架构设计,一个看起来很牛B的名词.... 架构设计师,一个很牛B的职位..... 在绝大部分公司里,架构师就是技术人员的终极方向,是技术金字塔的顶端。 所以,当我们看到一个架构师或者听到...

无寄语
2016/08/05
4
0
架构模式逻辑层模式之:表模块(Table Model)

表模块和领域模型比,有两个显著区别: 1:表模块中的类和数据库表基本一一对应,而领域模型则无此要求; 2:表模块中的类的对象处理表中的所有记录,而领域模型的一个对象代表表中的一行记录...

文艺小青年
2017/02/09
0
0
WCF版的PetShop之二:模块中的层次划分[提供源代码下载]

上一篇文章主要讨论的是PetShop的模块划分,在这一篇文章中我们来讨论在一个模块中如何进行层次划分。模块划分应该是基于功能的,一个模块可以看成是服务于某项功能的所有资源的集合;层次划...

长平狐
2012/09/04
425
0

没有更多内容

加载失败,请刷新页面

加载更多

ant 中的fileset include等拷贝

拷贝一个目录到指定目录下 例:<copy todir="${basedir}/new"> <fileset dir="${basedir}/old"> <include name="appgen" /> <include name="appgen/" /> <include name=appgen/**" /> <incl......

shzwork
11分钟前
1
0
react-jianshu项目的创建

创建项目 1、github上创建仓库react-jianshu 2、将项目克隆到本地git clone git@github.com:startjcu/react-jianshu.git 3、在当前目录(项目目录的上级目录)下执行create-react-app react-...

星闪海洋
20分钟前
2
0
OSChina 周二乱弹 —— 小哥哥,你可以教我写代码吗

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @nnnm: 生活大爆炸,结束了,这部陪伴了漫长时间的情景喜剧,最终是以诺贝尔奖和大团圆收尾的。虽然,不算精彩,但也是温馨。而少年谢尔顿的...

小小编辑
今天
235
11
typescript 接口 函数类型 可索引类型

函数类型 可索引类型 数字索引签名 字符串索引签名 数字索引签名返回值 必须是 字符串索引签名返回值的子集 只读索引签名

lilugirl
今天
3
0
Oracle SQL语法实例合集

如需转载请注明出处https://my.oschina.net/feistel/blog/3052024 目的:迅速激活Oracle SQL 参考:《Oracle从入门到精通》 ------------------------------------------------------------......

LoSingSang
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部