V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
501956430
V2EX  ›  程序员

电商网站中推出的活动如何与功能程序解耦

  •  
  •   501956430 · 2016-05-15 13:42:52 +08:00 · 2686 次点击
    这是一个创建于 3113 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位在产品中的推出的新活动是如何做到与程序功能解耦的? 如何解耦,使用什么技术或方式来解耦?

    如 1 、新用户注册,送 5 张不同额度的优惠券。 2 、新用户第一次购买的商品全部打 5 折。 3 、如 P2P 网站邀请好友赠送 10000 虚拟体验金。

    个人认为活动程序肯定不是跟功能程序绑定在一块的。如果绑定在一块,每次更新新的活动或者之前的活动下架都需要重新修改代码发布。 我想到的实现活动跟程序功能解耦,使用分布式消息中间件可以来做如 kafka ,想知道大家是如何思考的如何实现解耦的.

    11 条回复    2016-05-16 14:05:58 +08:00
    zhangfan
        1
    zhangfan  
       2016-05-15 16:27:59 +08:00
    很好。我想也了解一下。
    501956430
        2
    501956430  
    OP
       2016-05-15 16:59:17 +08:00 via iPhone
    人呢? 是问题太深了还是缺少大牛?
    iwillhappy1314
        3
    iwillhappy1314  
       2016-05-15 22:07:24 +08:00
    参考一下 WordPress 的 action
    domty
        4
    domty  
       2016-05-16 10:27:05 +08:00
    这种行为本身就是串行的吧。你看用链式执行的方法行不行
    就像 java web 的过滤器一样。每个结点完成执行下一顺序结点的操作。给每个链条设置一个开关,决定结点行为是否执行。整个链条独享一个数据库事务。
    链式的注册可以依赖缓存。

    只是我觉得如果业务规模不大的话我是会直接用代理把业务合并的,反正新业务上线都是要有新代码的,线上需要重新部署。
    ango
        5
    ango  
       2016-05-16 12:52:36 +08:00
    表 1 :活动(名称,有效期,全场|商品分类)
    表 2 :策略(新人|首单|5 折,全员|满 5 件|8.8 折)
    表 3 :活动策略(表 1 - 表 2 , 1:1 或者 1:n 关系)
    将上面的关系梳理,并 SOA 服务 API 化。

    单品、购物车、结算台, hook/action 一下 SOA 的 api ,查看是否有 活动策略。
    SlipStupig
        6
    SlipStupig  
       2016-05-16 13:20:57 +08:00
    用关系型数据库就能解决,用户信息表数据库关联一张活动表,过程分解:
    1.而每个活动都有个活动 ID ,活动 ID 对应的有到期时间
    2.用户表有个标志是否使用过优惠券券,如果为 False ,那提交价格的订单减少 50%(为了可定制,你可以写存储过程来计算不同的优惠方式,或者用 trigger 来触发优惠活动,无非就优惠和赠送两种,就算是涨价也是一个原理)
    3.推广链接绑定推广用户(链接参数中带用户 ID 号或 alias ),这个过程用 trigger 直接触发就行,链接有个有效日期,可以写个存储过程定期清理,也可以用程序逻辑控制

    关于反查推广链就更简单了,用户如果绑定了推广用户户,一次查询就能查询完成了
    这个过程基本上不需要自己的 APP 参与,数据库设计好就行
    501956430
        7
    501956430  
    OP
       2016-05-16 13:42:37 +08:00 via iPhone
    @iwillhappy1314 不懂 phPHP
    501956430
        8
    501956430  
    OP
       2016-05-16 13:43:55 +08:00 via iPhone
    @domty 跟功能代码绑定在一起,每次上下线都需要修改,风险太大了,比如改错了
    flydogs
        9
    flydogs  
       2016-05-16 13:54:42 +08:00 via iPhone
    开发程序时先预备各种钩子。
    以后有新活动就挂上,结束就卸下。
    501956430
        10
    501956430  
    OP
       2016-05-16 14:03:32 +08:00 via iPhone
    @SlipStupig 有没一些在架构设计上来考虑肿么解决呢! 要是数据库层面上来解决一些复杂的算法不是太合适吧
    501956430
        11
    501956430  
    OP
       2016-05-16 14:05:58 +08:00 via iPhone
    @flydogs 是的 这算是一种解决方案 就是每次都需要去加或者减
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2790 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 13:54 · PVG 21:54 · LAX 05:54 · JFK 08:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.