`
西蜀石兰
  • 浏览: 116723 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

事务和原子性的一些思考

 
阅读更多
最近代码写的有些痛苦,或者说,有些慢。觉得自己不能任性地去写代码,在写代码的时候,应该去考虑代码的复用,以及一些事务性的操作。

学习这东西真的很奇怪,大约在两周前,我大致看了下事务的概念,当时觉得也就一个一致性,并没有什么卵用。而事实上,在短短两周之后,在自己写代码的过程中,就遇到事务性的问题,写事务性的代码。

具体问题是APP的注册,在校验手机和验证码符合之后,会跳转到下一个页面提示用户填写密码,在我看来,之前和APP端定的是两个接口,做完之后稍加思考,就发现了其中的问题,用户注册应该是一个事务,用户名和密码永远应该同步生成。

至于原子性,涉及的具体操作是修改密码,因为确实可以用一句sql解决这个问题,而实际上,也也可以分成三步操作:1.根据用户名获取账户信息;2.比对密码;3.更新密码。仅仅对于这一个问题来说,一句sql确实容易,后者分解操作,反而繁杂;
这里就涉及到了原子性,因为根据手机号获取账户信息这一步操作,在整个业务过程中,会多次使用。那么将这种多次使用的功能单独拿出来,就很有必要了。

最直接的例子是,经过代码重构,Dao层只有四个接口,相比重构之前的8个接口,少了很多。

回头再看MVC框架,在之前的一篇文章中说过 controller-service-dao大多都是一对多的,这种一对多的好处在于,尽量原子化每一层的服务,使得每一层的接口尽可能的少。听起来似乎有点矛盾,尽量细化接口,还能减少接口?

事实上真是如此,就像数据库,不过增删改查四种功能,却支撑起庞大的互联网应用。

代码写到一定阶段,确实应该思考代码怎么写优雅,而不是仅仅为了实现功能。
都说程序员的抽象思维很重要,其实,就在这些不断地思考中慢慢提高的。

回头再看本科看操作系统时,书上提到的一对概念,精简指令集和复杂指令集。现在计算机的芯片大多都是精简指令集,也就是提供原子化的操作供上层应用使用。

而实际上,无论是从芯片还是操作系统,它们所提供的,都是对当前对象来说一些原子化的操作。

所谓的事务,其实早就被先贤们玩透了,我们仅仅是偷换个概念罢了。

分享到:
评论
2 楼 liq123 2016-09-20  
很不错的博客,受益良多。
1 楼 liq123 2016-09-20  
  

相关推荐

Global site tag (gtag.js) - Google Analytics