竟
然64個annotation,沒有分類,放在同一個package下,同一個package(javax.persistance)還有其他java文
件,共有88個java文件。不看內(nèi)容本身,單從表面,都覺得這是混亂不堪的事情。這是那個豬頭的杰作?glassfish上下載的源碼中,這些java
文件似乎都沒有author,估計也不好意思把名字放出來見人吧!
------
覺得對象關(guān)系存儲方面一直沒有突破,也沒有好的產(chǎn)品出來,其中一個原因,就是從沒有過優(yōu)秀的工程師投身過這個領(lǐng)域。關(guān)系數(shù)據(jù)庫為什么能夠一直堅守領(lǐng)地,成為絕大多數(shù)商業(yè)應(yīng)用的基石,其中一個原因就是有過大量的精英投身于此,包括兩個圖靈獎獲得者。
關(guān)
系數(shù)據(jù)庫,為了描述關(guān)系,創(chuàng)造一門SQL語言,將關(guān)系一些操作,例如投影(select)、選擇(where)、分組(group
by)等等,抽象得形象易懂,功能強大。對于數(shù)據(jù)的操作,SQL語言是最強大,也是最方便的,也是最易于使用的。一些非程序員的IT從業(yè)人員,非計算機專
業(yè)的人員都能夠熟練掌握SQL。
OO和Relational都是偉大的技術(shù),從計算機最高榮譽獎可以看出這兩個技術(shù)的偉大。OO的圖靈獎獲得者是三個,Relational的圖靈獎獲得者是兩個。
面向?qū)ο蠹夹g(shù)自1967年simula引進以來,所想披靡,93年-98年從C++開始流行,然后到Java,成為主流編程技術(shù)。Relational沒有OO那么輝煌,但是在數(shù)據(jù)存儲方面的地位固如磐石,長期占據(jù)絕對的地位。
曾
經(jīng)OO技術(shù)涉足于數(shù)據(jù)存儲領(lǐng)域,但終究沒有成功。面向?qū)ο髷?shù)據(jù)庫的變現(xiàn)總是差強人意,面向?qū)ο蟮姆绞讲僮鲾?shù)據(jù),總是不如使用關(guān)系那么方便,那么靈活,那么
易于使用,那么好的性能。于是人們在數(shù)據(jù)存儲和處理方面,不在青睞面向?qū)ο蠹夹g(shù),而是仍然使用關(guān)系方式,使用SQL語言,使用關(guān)系運算操作數(shù)據(jù)。面向?qū)ο?
數(shù)據(jù)庫成了曇花一現(xiàn)的東西,并且可能永遠都不會再流行了。
OO成了主流編程技術(shù),Relational占據(jù)了絕對的數(shù)據(jù)存儲地位,這兩大技術(shù)需要交互,需要橋接,這需要OR-Mapping。Relational雖然好,但我們也要與時俱進,所以也需要OR-Mapping。
但
是,做OR-Mapping時,不積極吸取relational方式對數(shù)據(jù)處理的靈活性、方便性、簡單性,而只強調(diào)Relational和對象之間的的
Mapping,試圖以面向?qū)ο蟮姆绞讲僮鲾?shù)據(jù),這是錯誤的方向。以前的EJB、現(xiàn)在Hibernate、JPA都犯了同樣的錯誤,試圖以更面向?qū)ο蟮姆?
式操作數(shù)據(jù),從而導(dǎo)致復(fù)雜混亂的模型,這也是JPA的現(xiàn)狀吧。例如user.getGroup(),目前的ORM試圖以純OO的方式操作數(shù)據(jù),所引起的
LazyLoad、n+1等問題,使得事情變得復(fù)雜而且混亂不堪。
一些開發(fā)人員,去學(xué)習(xí)Hibernate,不學(xué)習(xí)SQL,有人提倡,只需要了解面向?qū)ο缶幊碳夹g(shù),不需要了解關(guān)系技術(shù),亦屬于本末倒置。需求人員都會用的SQL語言,對數(shù)據(jù)操作最方便最簡單最強大的SQL語言,竟然成了令人生畏的紙老虎,可笑啊。
-------------
以下是過去的一些業(yè)界浮躁不理智:
1、面向?qū)ο髷?shù)據(jù)庫。曾被熱衷而吹捧,面向?qū)ο髷?shù)據(jù)庫的變現(xiàn)總是差強人意,面向?qū)ο蟮姆绞讲僮鲾?shù)據(jù),總是不如使用關(guān)系那么方便,那么靈活,那么易于使用,那么好的性能。于是人們在數(shù)據(jù)存儲和處
理方面,不在青睞面向?qū)ο蠹夹g(shù),而是仍然使用關(guān)系方式,使用SQL語言,使用關(guān)系運算操作數(shù)據(jù)。面向?qū)ο髷?shù)據(jù)庫成了曇花一現(xiàn)的東西,并且可能永遠都不會再
流行了。
2、
JDO投票鬧劇。2004-2005年,JDO的JSR在JCP投票被否決的,無聊者在Java社區(qū)以及媒體發(fā)起鬧事,陰謀論其為政治謀殺,幾大公司是的
迫于形象,重新投票使得JDO被通過,但JDO這種靜態(tài)AOP叫雕蟲小計式技術(shù),不單開發(fā)過程不方便,而且會使得"enhance"之后的代碼不可調(diào)試。
這完全是對開發(fā)者不友好的技術(shù),沒有前途的技術(shù),竟然會有人為它在JCP投票不通過鳴不平。這件事情使得我更堅信一點,不要相信那些技術(shù)編輯的判斷力。
3、
AOP。也是最近這幾年流行的一個名詞了。起了一個和OOP相似的名字,但是和偉大的OOP相比,它完全不算是什么。AOP只是一種很小很小的技巧而已,
靜態(tài)的AOP是黑客式的插入代碼,會導(dǎo)致代碼不可調(diào)試,動態(tài)的AOP能力有限,AOP最常被引用例子“日志AOP”是不合適,有用的日志通常是精心設(shè)計
的,AOP方式的日志在生產(chǎn)環(huán)境中基本上是不可用。OO這么多年,這么為偉大,人們總是希望自己能做點什么和偉大的OO相比,于是命名為AOP,這是一個
可笑的名字,前些年還有人談?wù)撁嫦驅(qū)ο蟮奈磥硎敲嫦蚴聦?,也是同樣的可笑。AOP有價值,但它是一種小技巧,和名字不般配。
--------------
目前在流行,但是可能是不理智的技術(shù):
1、hibernate之類的ORM,試圖以面向?qū)ο蠓绞讲僮鲾?shù)據(jù),和面向?qū)ο髷?shù)據(jù)庫一樣,重蹈覆轍。
2、Ruby,一個小腳本語言,只是因為動態(tài)類型、mixin之類的功能,還沒有被證明有生產(chǎn)力,有效益可用的腳本語言,就被媒體吹到天上去。Ruby有價值,但是最終結(jié)果會離大家的期待相差甚遠。