今儿去工行ATM给已朋友转账,遇到这么个情况:

选择对外转账后输入转入账号(输入两次),接着提示输入转入金额(输入一次金额),按确定,系统提示交易中,3秒左右,
提示“输入账号无效”,系统自动中断了操作,回到了初始界面,我勒个去,只好退卡,再试一次结果还是一样,最后只好打电话
和朋友确定账号,原来账号颠倒了俩个数字,汗死;再次去ATM操作转账,转账成功,我梳理下这个转账流程(省略插卡,输入密码步骤):
1,选择转账
2,选择转账类型(对外,对内,币中)
3,输入两次转入账号
4,输入一次转入金额,按“确定”按钮
5,系统开始交易(自动),约 3~5秒出现提示“转入,xxx号xxx金额”
6,提示成功(自动)流程结束

这里忽略异常处理,从这个流程中可以看出有这么2个问题,

1,输入两次账号后并没有真实验证输入账号的有效性(这两次1,2次仅是验证了账号是否一致)这个验证可能放到了后面”确定“按钮后,我的理由是这里操作很快体系也没有等待现象,主要是最后的交易中提示了“转入账号无效”的提示

2,输入金额后,点击”确定“后,开始交易,最后提示“转入,xxx号xxx金额”,系统自动就完成了转账过程,并没有再次提示
“转入,xxx号xxx金额”让用户最终确认,如果这里输入错误且有效的卡号,那钱就转到别人账号中取了,岂不杯具鸟,这里所有验证都是在输入金额按”确认“后进行(转出,转入验证等),看似简化了操作,其实前面做了一大堆的操作,最后流程(如果异常)整个操作就失败了,系统做无用功
,客户也做无用功,我猜测在按”确定“后,操作应该进入了事务阶段,这里有任何异常,都会退出或者回滚。也就说,这个事务阶段很“长”

个人认为,
1,输入两次账号后,系统应该验证账号(背后也要验证转出账号是否合法)的合法性,这里并不需要事务,合法则往下操作,否则中断操作,引导用户返回操作(不要系统自动返回并结束流程)
2,在输入转入金额后,提示”转入xxx账号xxx金额“,这里应该让用户“确认”,这里也不需要事务
3,最后在用户按”确定“按钮后再开始转账,这里开始事务
4,其他步骤一样

这里有两个验证一个是系统验证账号的合法性另一个是用户看到”转入xxx账号xxx金额“确定操作后,而不是输入金额后“确定”(这里看不到”转入xxx账号xxx金额“,最后系统倒提示了“转入xxx账号xxx金额”这个时候用户是没有任何操作权的),系统开始正式转账到这里所有条件都具备了(不要把准备工作放入事务,只把必要的操作放入事务),好处是,缩短事务范围,让用户最终确定转账(也可以在输入两次账号后让用户确定转入账号,这样用户有两次决定权,而不是一次决定权)

工行ATM转账——事务操作的更多相关文章

  1. 使用JDBC进行数据库的事务操作(2)

    本篇将讲诉如何使用JDBC进行数据库有关事务的操作.在上一篇博客中已经介绍了事务的概念,和在MySQL命令行窗口进行开启事务,提交事务以及回滚事务的操作. 似乎事务和批处理都可以一次同时执行多条SQL ...

  2. 使用JDBC进行数据库的事务操作(1)

    本篇讲述数据库中非常重要的事务概念和如何使用MySQL命令行窗口来进行数据库的事务操作.下一篇会讲述如何使用JDBC进行数据库的事务操作. 事务是指数据库中的一组逻辑操作,这个操作的特点就是在该组逻辑 ...

  3. MongoDB模拟多文档事务操作

    Mongodb不支持多文档原子性操作,因此依据两阶段提交协议(Two Phase Commits protocol)来模拟事务. 以两个银行账户之间的转账行为为例,来说明如何实现多文档间的事务操作. ...

  4. Django 事务操作

    如何在Django中进行事务操作 案例: 客户A要给客户B转一笔钱,这个在数据库中需要进行两步: 1.客户A减钱 2.客户B加钱 如果在第一步结束后,服务器出现异常,停下了,第二步没有进行,如果数据库 ...

  5. Java框架spring学习笔记(十七):事务操作

    事务操作创建service和dao类,完成注入关系 service层叫业务逻辑层 dao层单纯对数据库操作层,在dao层不添加业务 假设现在有一个转账的需求,狗蛋有10000元,建国有20000元,狗 ...

  6. Spring中的事务操作

    事务的特性 原子性:强调事务的不可分割. 一致性:事务的执行的前后数据的完整性保持一致. 隔离性:一个事务执行的过程中,不应该受到其他事务的干扰. 持久性:事务一旦结束,数据就持久化到数据库. 如果不 ...

  7. Spring 中的事务操作、注解、以及 XML 配置

    事务 事务全称叫数据库事务,是数据库并发控制时的基本单位,它是一个操作集合,这些操作要么不执行,要么都执行,不可分割.例如我们的转账这个业务,就需要进行数据库事务的处理. 转账中至少会涉及到两条 SQ ...

  8. Django中-事务操作

    如何在Django中进行事务操作呢? 近期,公司里要使用Django开发一套金融相关的系统. 涉及钱了.....安全安全安全 如果钱转到一半,系统崩了,咋办? 如果钱汇到一半,系统崩了,咋办? 如果东 ...

  9. (转)Spring中的事务操作

    http://blog.csdn.net/yerenyuan_pku/article/details/70024364 事务的回顾 什么是事务 事务是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么 ...

随机推荐

  1. JSON-fastjson

    fastjson 是alibaba的一个Json处理工具包. 1.使用  JSON.toJSONString   和  JSON.parseObject fastjson只需要掌握两个静态方法:JSO ...

  2. 解密jQuery内核 样式操作

    基础回顾 jQuery里节点样式读取以及设置都是通过.css()这个方法来实现的,本章通一下分解探究下jquery里这部分代码的实现 那么jQuery要处理样式的哪些问题? 先简单回顾下样式操作会遇到 ...

  3. XenServer pool 移除server 设置master

    如果因为Pool中Master主机由于某种原因导致失效,会引起整个Pool进入紧急模式,恢复步骤如下: 在成员服务器上输入如下命令 # xe host-emergency-ha-disable     ...

  4. ImageView设置边框的两种方式

    转载:http://www.2cto.com/kf/201308/239945.html package cc.testimageviewbounds; import android.os.Bundl ...

  5. 通过3个Hello World应用来了解ASP.NET 5应用是如何运行的(1)

    微软在开发ASP.NET 5(当时被称为ASP.NET vNext)是采用的代号为Project K,所以运行时被称为KRuntime.KRuntime是一个SDK,它包含了编译和运行应用程序的所有资 ...

  6. 教你如何塑造JavaScript牛逼形象

    如何写JavaScript才能逼格更高呢?怎样才能组织JavaScript才能让别人一眼看出你不简单呢?是否很期待别人在看完你的代码之后感叹一句“原来还可以这样写”呢?下面列出一些在JavaScrip ...

  7. 用javascript做一个视频播放器

    以前我们在网页上播放视频,都是要麻烦flash来实现.看着那一大段的<object>真心觉得累.随着html5的不断普及,现在是时候使用html5提供的video元素来做点正经事了,但是要 ...

  8. Hammer.js分析(三)——input.js

    input.js是所有input文件夹中类的父类,浏览器事件绑定.初始化特定的input类.各种参数计算函数. Input父类和其子类就是在做绑定事件,各种参数计算.整合.设置等返回自定义事件对象,交 ...

  9. struts2学习笔记--使用Validator校验数据

    我们在进行一些操作是需要对用户的输入数据进行验证,比如网站的注册,需要对各个数据项进行数据校验,Struts2提供了一些默认的校验器,比如数字的检测,邮箱的检测,字符串长度的检测等等. 常用的Vali ...

  10. Java中写文件操作

    OutputStream 和 Writer OutputStream类(直接操作byte数组) 该类是字节输出流的抽象类,定义了输出流的各种操作方法.如下图是OutputStream的层次结构: By ...