Swift提供了数据结构struct和类Class两种, 数据结构和类一样支持行为,包括方法和初始化,数据结构和类的重要区别是:数据结构按复制方式传递,当你将一个数据结构传递给另外一个变量时,实际是复制了一份,但是类生成的对象进行传递时是按引用传递,传递的是那个对象的地址(当然地址值也是复制)。
Swift Struct代码如下:
|
Swift语言显式地区分了数据结构struct和类Class,而在我们传统语言中,包括Java C# Pthyon Ruby等基本都只有类Class一种对象模型。这就产生了问题。
这个问题我在从数据结构+算法分析ORM的末日已经提到,数据表是一种数据结构,ORM框架是将数据结构转为对象,其实这个对象是贫血对象,也就是只有属性或setter/getter而没有其他业务行为的对象,如:
|
我们使用ORM,是将数据表order中的记录拷贝到这个贫血对象Order中。实际上这个失血对象Order也是一种数据结构,只不过因为语言本身不支持数据结构,所以,我们借用类型Class的对象模型来作为数据结构对象,而且是对Class进行肢解的一种黑客方式(去除了其鲜明特征:行为)。
现在有了Swift的struct,我们实际应该是将数据表order的数值复制到struct中,而且struct是按值传递的,如果你修改了原来的struct,其他复制的不会被改变。数据表实际是一个远程的struct。
从以上分析看出,目前ORM框架包括JPA Hibernate Django Rails的ActiveRecord实际都定位错误了,将类型Class对象模型作为数据结构使用。
以前我们指出ORM末日主要是从抽象泄漏和性能角度提出问题,但是这些问题一般只是在项目复杂时才显露出来,小项目反而体现ORM的快速的特点,但是我们从Swift这个新语言上看到,ORM方向搞错了,应该是structRM才对啊。
ORM在未来面临土崩瓦解,这个词语会成为历史名词。
[该贴被banq于2014-06-07 09:05修改过]