代码的变和不变
来源:互联网 发布:一级级域名怎么设置 编辑:程序博客网 时间:2024/04/28 01:41
哲学上说变与不变,讲的是绝对运动与相对静止的道理,在代码设计中,也有许多变和不变之间的辩证故事。
有一些类在创建以后,整个生命周期内都不会发生变化,这种模式被称为Immutable Pattern。
较弱的不变模式:指的是一个类的实例状态是不可变化的,但是这个类的引用的实例却可以变化。
比如说:Visitor模式常常是这样的,整个流程是不可变的,但是我为我的整个流程提供灵活的切入点,提供出来访问接口,供变化的部分完成。
较强的不变模式:一个类实例状态不可变,其内部引用的所有实例也不可变。
这个就比较多了,JDK中的String、Integer、Byte等都是不可变的。
变化的场景需要考虑许多事情,因为变化带来了“状态”的概念。但正因为有了状态,整个世界才丰富多彩。变化需要考虑共享访问的情形,需要考虑状态之间的关系。当我们享受到代码变化带来的愉悦,也开始追求不变的代码,那一份古朴和单纯。
不变,引伸出对象复用的好处来。无状态的单例,很多场景下可以看作简单的工具类;更多的对象在一定时期内无状态,比如Prototype模式,比如线程池、缓存,这些都将哲学中的变与不变最终结合到代码中去。不变,是快速的、简单的、敏捷的,将变化的状态连结起来了。
程序=算法+数据,算法是不变的,数据是可变的。仿佛从软件的一开始,变与不变就给后续的万事万物埋下了伏笔,代码的世界围着这个特殊的视角旋转。随着动态语言的兴盛,以往不可变的方法也可以被改变,方法本身也能变成对象,数据和算法轻而易举地在代码中变幻,我们越来越疑惑,还有什么不变的东西,可以让我们彻底看清和相信一次?
Action是具备状态的,线程独立的;Service和DAO是无状态的,是可以被池化的。不变得再极致一点,我希望从编译之后它就是不变的,而不是对象创建之后不变,这就是方法。静态语言中的方法逻辑本身就是不可变的;而另一方面,当方法内部所使用的一切变量,都严格被控制在方法内部的临时变量或者按值传递的参数中,这说的,不正是函数式编程吗?
也许,其实软件的本质很简单,我一直在思考,软件复杂化的本质就是为了追求简单的东西。就像这个变化莫测的世界,不变的故事,总是那么淅淅沥沥的,却又惊人地相似。
本文的最后,Rod Johnson说:
If possible, design applications to use a stateless service layer. Hold state in the web tier, rather than in the business logic tier, if possible.
- 代码的变和不变
- 唯一不变的,就是变
- [英语阅读]“香格里拉”的变与不变
- 变是不变的,时刻准备着
- 变是永远不变的现实情况
- 变与不变的辩证观念
- DT 时代,云上运维的变与不变
- java,重入锁的变量值不变
- “变点和不变点”说明面向对象的设计方法,弱偶合,(interfance,factory等等)
- 糊糊论道--谈谈变与不变和树下悟道的事情
- 变与不变!
- 变 or 不变?
- 变与不变
- 变才是不变
- 变与不变
- 不变的云,变化的YunOS 论YunOS之“变”
- 生活在变 寻找快乐的心情不变
- 借我一双慧眼(变是不变的)
- 分享 多项目管理的学习网址
- Ogre引擎源码——场景查询
- 对软件项目团队成员进行角色和岗位划分
- Oracle 物化视图
- 项目管理之IT项目团队的管理技巧
- 代码的变和不变
- 构架师、部门经理、技术总监、项目经理
- MAGENTO数据转移/换服务器/换域名
- 2011年压力很大,但很有意思
- 如何组建网站开发团队
- 项目开发工作的流程
- CTO的团队建设和项目管理的压力
- 在windows下运行CTS
- 单身旅行之平乐游记