zoukankan      html  css  js  c++  java
  • 大学毕业4年-回顾和总结(10)-资金账务系统的架构设计(产品视角+技术视角)(图文并茂)

     背景
         2014年和2015年开发P2P网贷系统的时候,某大牛有设计了一套简洁实用的资金账户系统。
         系统设计主要是为了服务于P2P网贷等系统,资金账务系统可以作为一个独立的子系统对外提供服务。
         本系统,我基本没有写过几行代码,更多是学习,理解别人的架构设计。

         之前,有写过相关总结。
         大学毕业4年之际,想把之前各方面的积累都好好总结一番。
         从本篇开始,写点以前做过的产品和技术架构等。不玩高大上,要简单直白。


    友情提示注释,是不会太多的。英文过关的朋友,基本都看得懂。“约定优于配置”,“约定优于注释”。

     产品核心功能


    业界“最佳实践”
    殊途同归:支付宝、微信支付、京东商城,和钱相关的功能,最核心的都是:资金账户、交易(充值、提现、转账、支付)、查询(资金流水、分类查询、交易明细)。

    支付宝图




    雷观技术研发,懂产品对提升自己的架构能力,可以说是有巨大帮助的。

     
    1.开户
         功能描述:创建一个账户。
         账号和账户是不同的概念,前者侧重普通系统登录,后者侧重“资金类系统”。
     

    2.交易
      充值:为一个账户增加一笔钱。
      提现:从一个账户减少一笔钱。
      转账:把一个账户中的钱,转移到另外一个账户。
      批量转账:转账的增强版。
      冻结资金:把一个账户的资金,冻结一部分,可用余额会减少相同的数额。
      解冻资金:把一个账户的资金,解冻一部分,可用余额会增加相同的数额。

    3.查询
     基本信息查询:查询一个账户的总金额、可用余额、冻结余额等信息。
     批量查询:查询多个账户的金额等信息。
     开户-冻结账户-解冻账户
     冻结资金、解冻资金等日志
     交易明细:包含了充值、提现、交易等所有的账户资金变动日志。

    4.冻结账户/解冻账户
      冻结;把一个账户给冻结了,冻结的账户可能无法进行提现等操作。
      解冻:把账户从冻结状态,变为正常状态。

    技术架构
        技术架构图/产品架构图
       
       

       3种模式:本地jar包或者源码、WebService、Dubbo。
    当使用WebService/Dubbo的时候,需要注意“分布式事务”。我们在做的时候,没有过多考虑。

    数据库设计

    账户表

    内部账户表


    账户资金冻结记录

    账户资金流水

    充值返回通知

    充值记录

    交易记录


    提现



    详细设计 

    接口包

    外界调用账务服务,先引入接口包就,再引入实现类jar。如果是WebService和Dubbo,只需要引入接口jar包就行了。

    facade: 对外提供的服务,是通过facade包下的3个接口来暴露的。
    enums:枚举类
    model:各种模型
    result:结果集,code+实体。错误码code,也可以通过Exception+code来实现。
    util:工具类。

    AccountOpenFacade主要提供开户类的功能,外部账户、内部账户等是有点区分的。


    AccountQueryFacade查询类功能,查询账户、资金流水、资金冻结记录等。


    AccountTransFacade交易类功能,充值、提现、冻结、取消冻结、转账。


    实现包


    facade.impl: 对外提供服务的实现类
    account:账户模型,账户本身也可以有多重实现,这个还真是没有想到。比如,DummyAccount可以空实现,有的时候会用到。
    constants:常量
    dal: 数据库CRUD
    exception:异常
    service:内部业务逻辑,主要是查询类的。
    trans: 内部业务逻辑,主要是交易类的。
    util:工具类。
    vo:只有一个LockAccountVO,可能要锁账户时的临时VO。这个地方略显高端!!!

    查询类功能service










    交易类功能trans











    不足之处
        当时做P2P网贷系统的时候,资金账务系统只实现了这些“应用类”的核心功能。 
       刚刚把产品架构图画好了,和某电商大牛交流了下,他觉得漏掉了2个核心功能:对账和结算。
       先记下来,下周认真学习下。


    总结
       1.资金账务系统,是比较通用的。
       2.先有产品设计,再有技术架构,再细节设计和编码。

       3.面向接口编程。
       4.外界系统,只需要知道接口就可以了。
       5.资金账务类系统,需要一点业务能力。部分功能,需要懂财务会计等概念。
     
     一转眼,2016年5月,马上就要过去了。
    这个月,写得大多是“创业投资和商业模式” 类的文章,效果还是非常好的。
    但是,目前还是“技术立身” ,写点技术类的总结,压压惊,嘿嘿!!!

    小雷FansUnion-一个有创业和投资经验的资深程序员-全球最大中文IT社区CSDN知名博主-排名第120
    投资案例:好狗狗皇包车职业梦比呀比易途8
    2016年5月29日 
    湖北-武汉-晴 
     

    雷观技术研发,懂产品对提升自己的架构能力,可以说是有巨大帮助的。 
  • 相关阅读:
    data filter 去掉HTML文件中的所有标记
    data filter 去掉HTML文件中的所有标记
    C++ 上溢和下溢(overflow underflow)
    C++ 上溢和下溢(overflow underflow)
    按字节提取整形数值(按位与运算符“&”、右移位运算符“>>”)
    按字节提取整形数值(按位与运算符“&”、右移位运算符“>>”)
    二进制、十进制、N进制 ○| ̄|_
    二进制、十进制、N进制 ○| ̄|_
    JAVA合法标识符
    JAVA合法标识符
  • 原文地址:https://www.cnblogs.com/qitian1/p/6462394.html
Copyright © 2011-2022 走看看