今儿去工行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. 关于xcode导出设置中的一些概念

    Development Certificates:在电脑通过秘钥串生成一个私人秘钥,这就是:CertificateSigningRequest.certSigningRequest 简称CSR,团队中 ...

  2. OPEN CASCADE Curve Continuity

    OPEN CASCADE Curve Continuity eryar@163.com Abstract. 设计一条复杂曲线时,出于设计和制造上的考虑,常常通过多段曲线组合而成,这就需要解决曲线段之间 ...

  3. 前端学PHP之数组函数

    × 目录 [1]键值操作 [2]记数[3]回调函数[4]组合[5]栈和队列[6]顺序 前面的话 PHP中的数组功能非常强大,数组处理函数有着强大.灵活.高效的特点.PHP5提供了近100个操作数组的系 ...

  4. Android 之 ProgressDialog用法介绍

    布局文件测试: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" androi ...

  5. 2012-09-10 23:30 如何解决HtmlAgilityPack得到的InnerText中有残留的script、样式的问题

    那么如何解决HtmlAgilityPack得到的InnerText中有残留的script.样式的问题呢,在google上搜索“HtmlAgilityPack script innerText”找到了s ...

  6. 记一次ASP.NET MVC性能优化(实际项目中)

    前言 在开发中为了紧赶项目进度而未去关注性能的问题,在项目逐渐稳定下来后发现性能令人感到有点忧伤,于是开始去关注这方面,本篇为记录在开发中遇到的问题并解决,不喜勿喷.注意:以下问题都是在移动端上出现, ...

  7. 趣味GPS

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 简介 GPS的全称是全球定位系统(the Global Positioning S ...

  8. 使用ikmv将jar转换为dll,在.NET中直接调用

    ikmv百科介绍 ikvm官网 使用ikvm前需要先安装java. ikvm的使用比较简单,到官网下载ikvm需要的组件,解压后在path中配置 %IKVM_HOME%\bin 在cmd中使用命令 i ...

  9. T-SQL:毕业生出门需知系列(三)

    第3课 排序检索数据 3.1 排序数据(ORDER BY) 下面的 SQL 语句返回某个数据库表的单个列.观察其输出,并没有特定的顺序. SELECT prod_name FROM Products; ...

  10. Android随笔之——Android ADB详解

    ADB全称Android Debug Bridge, 是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备.它主要有以下几个功能: 1.运 ...