工行ATM转账——事务操作
今儿去工行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转账——事务操作的更多相关文章
- 使用JDBC进行数据库的事务操作(2)
本篇将讲诉如何使用JDBC进行数据库有关事务的操作.在上一篇博客中已经介绍了事务的概念,和在MySQL命令行窗口进行开启事务,提交事务以及回滚事务的操作. 似乎事务和批处理都可以一次同时执行多条SQL ...
- 使用JDBC进行数据库的事务操作(1)
本篇讲述数据库中非常重要的事务概念和如何使用MySQL命令行窗口来进行数据库的事务操作.下一篇会讲述如何使用JDBC进行数据库的事务操作. 事务是指数据库中的一组逻辑操作,这个操作的特点就是在该组逻辑 ...
- MongoDB模拟多文档事务操作
Mongodb不支持多文档原子性操作,因此依据两阶段提交协议(Two Phase Commits protocol)来模拟事务. 以两个银行账户之间的转账行为为例,来说明如何实现多文档间的事务操作. ...
- Django 事务操作
如何在Django中进行事务操作 案例: 客户A要给客户B转一笔钱,这个在数据库中需要进行两步: 1.客户A减钱 2.客户B加钱 如果在第一步结束后,服务器出现异常,停下了,第二步没有进行,如果数据库 ...
- Java框架spring学习笔记(十七):事务操作
事务操作创建service和dao类,完成注入关系 service层叫业务逻辑层 dao层单纯对数据库操作层,在dao层不添加业务 假设现在有一个转账的需求,狗蛋有10000元,建国有20000元,狗 ...
- Spring中的事务操作
事务的特性 原子性:强调事务的不可分割. 一致性:事务的执行的前后数据的完整性保持一致. 隔离性:一个事务执行的过程中,不应该受到其他事务的干扰. 持久性:事务一旦结束,数据就持久化到数据库. 如果不 ...
- Spring 中的事务操作、注解、以及 XML 配置
事务 事务全称叫数据库事务,是数据库并发控制时的基本单位,它是一个操作集合,这些操作要么不执行,要么都执行,不可分割.例如我们的转账这个业务,就需要进行数据库事务的处理. 转账中至少会涉及到两条 SQ ...
- Django中-事务操作
如何在Django中进行事务操作呢? 近期,公司里要使用Django开发一套金融相关的系统. 涉及钱了.....安全安全安全 如果钱转到一半,系统崩了,咋办? 如果钱汇到一半,系统崩了,咋办? 如果东 ...
- (转)Spring中的事务操作
http://blog.csdn.net/yerenyuan_pku/article/details/70024364 事务的回顾 什么是事务 事务是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么 ...
随机推荐
- 移动开发--Hybrid和Native混合开发-->HybridApp 、NativeApp、WebApp
1.1. APP三种开发模式 智能手机之普及不用多说,手机APP渗投到各个行业:电商(淘宝.京东等).金融(各手机行业.P2P借贷等).医疗(智慧医疗).交通(滴滴.Uber等).教育(慕课网 ...
- Nginx配置文件解析
user nginx nginx; #定义Nginx运行的用户和用户组 worker_processes 1; #nginx进程数,建议设置为等于CPU总核心数 worker_rlimit_nofil ...
- AngularJS表单验证实现方法详解
本文主要是通过源码实例和大家分享AngularJS中的表单验证相关知识,希望通过本文的分享,对大家学习AngularJS有所帮助. 1.常规表单验证: 2.AngularJs中提供的表单验证实例. 实 ...
- AngularJS之初级Route【一】(六)
前言 这一节我们来讲讲AngularJS中的路由以及利用AngularJS在WebAPi中进行CRUD.下面我们一起来看看. 话题 当我们需要进行路由映射时即用到$route服务,在AngularJS ...
- Python快速教程 尾声
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 写了将近两年的Python快速教程,终于大概成形.这一系列文章,包括Python基 ...
- How to implement a neural network
神经网络的实践笔记 link: http://peterroelants.github.io/posts/neural_network_implementation_part01/ 1. 生成训练数据 ...
- java 中多线程的同步函数的运用
/* * 需求: * 银行有一个金库 * 有两个储户,分别存300元.每次存100 , 存三次 * * 这个是有线程问题的, * * 我们应该通过下边的三个方法来查找问题 * 1.明确哪些代码是多线程 ...
- Oracle RAC客户端tnsnames.ora相关配置及测试
1.Oracle RAC服务端/etc/hosts部分内容如下 2.查看服务端的local_listener和remote_listener参数 3.客户端tnsnames.ora配置参考 3.1 1 ...
- struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo
理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...
- JavaScript把项目本地的图片或者图片的绝对路径转为base64字符串、blob对象在上传
主题: JavaScript把项目本地的图片或者图片的绝对路径转为base64字符串.blob对象在上传. 用处: 从本地选择图片上传,如项目规定只能选择本项目文件夹下的图像上传为头像等. 主要思想: ...