复杂输入分析系统设计

我们在开发中可能会遇到这样一类问题:

1 你需要分步骤录入一个几页信息的大数据表

2 系统会根据输入数据根据某种规则分析出结果报表

3 结果需要持久化

4 结果可以修改

5 结果报表可以根据规则重新生成

6 每个输入有唯一的一个对应的报表

7 分析规则是容易测试的

 

我在解决这个问题的时候花了很多的时间,绕了个大弯,后来才发现是策略的问题,把最终设计的结果整理下:

 

Problem

用户记录整个过程的表,每次处理都有这么一张表:

account_id, 用户ID

input_id, 输入

output_id, 输出

stage,  目前阶段(等待输入,输入完毕,处理完毕)

problem_version 版本

 

StorageSource

用于保存录入信息,所有信息可以都保存在一个表里(横表),这种方法最大的问题就是无法动态的修改或者增加题目,好处是简单,对于输入相对稳定的人来说可以采用横表设计。对于动态要求较高的采用竖表比较合适。

如果采用横表,字段为

quest1,quest2....,questn...,profile_stage,created_at,updated_at

one_to_one Problem

 

如果是竖表

problem_id, quest_key, quest_answer, created_at, updated_at

这种设计灵活,但是存取操作相对复杂

many_to_one Problem

 

ReadableSource

将StorageSource表和其他信息包装到一个ReadableSource表中,作为分析输入依赖的唯一类

 

ViewableResult

将分析结果全部输出到view对象,作为输出的唯一依赖

 

Analyzer

将业务规则封装到该对象,采用builder模式来设计

builder.read(readable_source)

builder.build_first_stage

builder.build_second_stage

viewable_result = builder.viewable_result

 

StorageResult

将输入结果ViewableResult持久化

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值