最近代码写的有些痛苦,或者说,有些慢。觉得自己不能任性地去写代码,在写代码的时候,应该去考虑代码的复用,以及一些事务性的操作。
学习这东西真的很奇怪,大约在两周前,我大致看了下事务的概念,当时觉得也就一个一致性,并没有什么卵用。而事实上,在短短两周之后,在自己写代码的过程中,就遇到事务性的问题,写事务性的代码。
具体问题是APP的注册,在校验手机和验证码符合之后,会跳转到下一个页面提示用户填写密码,在我看来,之前和APP端定的是两个接口,做完之后稍加思考,就发现了其中的问题,用户注册应该是一个事务,用户名和密码永远应该同步生成。
至于原子性,涉及的具体操作是修改密码,因为确实可以用一句sql解决这个问题,而实际上,也也可以分成三步操作:1.根据用户名获取账户信息;2.比对密码;3.更新密码。仅仅对于这一个问题来说,一句sql确实容易,后者分解操作,反而繁杂;
这里就涉及到了原子性,因为根据手机号获取账户信息这一步操作,在整个业务过程中,会多次使用。那么将这种多次使用的功能单独拿出来,就很有必要了。
最直接的例子是,经过代码重构,Dao层只有四个接口,相比重构之前的8个接口,少了很多。
回头再看MVC框架,在之前的一篇文章中说过 controller-service-dao大多都是一对多的,这种一对多的好处在于,尽量原子化每一层的服务,使得每一层的接口尽可能的少。听起来似乎有点矛盾,尽量细化接口,还能减少接口?
事实上真是如此,就像数据库,不过增删改查四种功能,却支撑起庞大的互联网应用。
代码写到一定阶段,确实应该思考代码怎么写优雅,而不是仅仅为了实现功能。
都说程序员的抽象思维很重要,其实,就在这些不断地思考中慢慢提高的。
回头再看本科看操作系统时,书上提到的一对概念,精简指令集和复杂指令集。现在计算机的芯片大多都是精简指令集,也就是提供原子化的操作供上层应用使用。
而实际上,无论是从芯片还是操作系统,它们所提供的,都是对当前对象来说一些原子化的操作。
所谓的事务,其实早就被先贤们玩透了,我们仅仅是偷换个概念罢了。
分享到:
相关推荐
深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发可见性、有序性、原子性与JMM内存模型深入理解并发...
一、Redis 事务的实现原理 一个事务从开始到结束通常会经历以下三个阶段: 1、事务开始 客户端发送 MULTI 命令,服务器执行 MULTI 命令逻辑。 服务器会在客户端状态(redisClient)的 flags 属性打开 REDIS_MULTI ...
redis实现分布式锁,自旋式加锁,lua原子性解锁
原子性有序性可见性
本研究支持原子核指导原子的电子结构的挑衅性思想。 随着原子序数的增加,化学元素的原子摩尔体积演化服从原子的电子结构规则,与此同时,中子多余的加到原子核上的同时发生了镜面演化。 诸如d嵌段过渡金属的原子...
我们既要批量去放入缓存,又要保证每个key都加上过期时间(以防key永不过期),这时候事务操作是个比较好的选择为了确保连续多个操作的原子性,我们常用的数据库都会有事务的支持,Redis也不例外。但它又和关系型...
原子核强度电势和原子价层电量对元素电负性的标度,余德才,曹文娟,本文根据万有引力势与电势的关系式和系统的对比质电比(单位电量的质量)Sr的物理意义,定义了系统的强度电势-单位质量的电势(Sr-1/
原子闭包系统, 原子闭包算子和原子全蕴含系统,杨海建,李庆国,本文引进了原子闭包系统,原子闭包算子以及原子全蕴含系统等概念, 研究了它们之间的相互关系, 给出了由原子闭包系统来表示有限原子�
事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎能够成功的对数据库应用该组查询的全部语句,那么执行该组查询。如果其中有任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会...
并发二:原子性、可见性、有序性
原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。 一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务...
多线程:可见性、有序性、原子性.xmind
原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性 个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做 一致性 事务必须是使数据库从一个一致性状态变到另一个一致...
原子吸收和原子荧光光谱法剖析PPT课件.pptx
分布式Redis原子操作示例,近期项目中遇到分布式项目中多节点大并发操作redis同一个key。此案例利用java调用LUA脚本实现redis操作的原子性。分享出来大家参考。
正点原子Uboot和linux源码
对volatile的原子性做探究,加上自己的实验代码和实验结果! Case多核?单核?是否有volatile是否编译器优化-O2结果!
NULL 博文链接:https://woxintech2011.iteye.com/blog/1550476
SQLite的原子提交原理SQLite的原子提交原理SQLite的原子提交原理SQLite的原子提交原理SQLite的原子提交原理SQLite的原子提交原理SQLite的原子提交原理SQLite的原子提交原理SQLite的原子提交原理SQLite的原子提交原理
原子核计算题原子核计算题原子核计算题原子核计算题