romza在BJUG的maillist里提出了一個(gè)問(wèn)題,Web開(kāi)發(fā)中的Component,能不能夠通過(guò)OSGi這樣的插件體系,來(lái)進(jìn)行組織,以提高代碼的可重用性。
這個(gè)帖子引起了廣泛而深入的討論,我也在很后面加入了進(jìn)去,說(shuō)了一點(diǎn)。
飛馳的話題呼嘯而過(guò),我稍一遲疑,就趕不上趟了。
但是這里面的話題,又的確是我非常感興趣的(嗯,跑題了那么遠(yuǎn),但是還在我的興趣范圍內(nèi)),所以的確是應(yīng)該出來(lái)聊聊我的看法,特別是徐Rx同志多次提到了我的DJ...
1、徐Rx,我認(rèn)為你不應(yīng)該為自己的表達(dá)能力過(guò)多辯護(hù),還把責(zé)任推到我們中華民族偉大的中文上來(lái)。看著你的帖子,我好幾次都差點(diǎn)暈過(guò)去,百分之50中文單詞勾兌百分之50的英文單詞。這樣的句子,能讓人讀懂嗎?
2、幾次昏過(guò)去之后,我又強(qiáng)迫自己醒過(guò)來(lái)接著看帖子,我認(rèn)為徐Rx還是講得很正確的,除了再次想把我的DJ和語(yǔ)義網(wǎng)拉上關(guān)系之外。
3、回到最初的話題,romza的需求可以理解,但是你所猜測(cè)的那個(gè)解決方案(插件體系結(jié)構(gòu))我認(rèn)為不是一條正路。提高軟件的重用性,自然是大家多年來(lái)一直追求的目標(biāo),但是不同的應(yīng)用領(lǐng)域,應(yīng)該有不同的重用規(guī)范。彼此之間可以參考,但是很難照搬。就我對(duì)Web開(kāi)發(fā)的理解,在AJAX還沒(méi)有大規(guī)模改變Web開(kāi)發(fā)的世界之前,瀏覽器的運(yùn)作模式是非常單調(diào)的(請(qǐng)求-響應(yīng))模式,響應(yīng)的輸出,無(wú)非就是文本,在這樣的世界里,Web模板是最自然的解決方案。比如buaawhl的Fastm,或者我的Fastm+。但是當(dāng)AJAX的概念大面積的進(jìn)入人們的視線之后,傳統(tǒng)的思維就必須修正了,由此而引發(fā)的一系列的思考,我倒現(xiàn)在也沒(méi)有完全想好,也許Micheal
Chen可以出來(lái)談?wù)劇5牵F(xiàn)有類(lèi)似于AjaxTags這樣的用Tags給Web1.0打補(bǔ)丁的方式,我認(rèn)為是丑陋的。
4、再說(shuō)面向?qū)ο笈c面向方面的問(wèn)題,在只有Object的世界里,對(duì)象就是唯一的可以重用的積木。這個(gè)積木從其本質(zhì)來(lái)說(shuō),就是有缺陷的,所以要想在OO的基礎(chǔ)上重用,就會(huì)很辛苦(參見(jiàn)我的《喪鐘》系列)。但是貿(mào)然引入Aspect,也并非解救之道。就像AJAX出現(xiàn)之后,我們必須重新思考Web開(kāi)發(fā),而不是打補(bǔ)丁一樣。Aspect的概念出現(xiàn)之后,我們現(xiàn)在的用法,也不過(guò)是用Aspect給Object打補(bǔ)丁。這樣的做法,在我看來(lái),一樣是丑陋的。
5、AOSD我看了一下,那老頭舉的例子,簡(jiǎn)直就是在說(shuō)夢(mèng)話。要像他那樣做面向方面的分析設(shè)計(jì),系統(tǒng)肯定是做不出來(lái)的。
6、說(shuō)說(shuō)我的DJ,在我看來(lái),強(qiáng)行將一些行為劃入Object,而另一些劃入Aspect,是不平等的。這些行為不該有這樣的高低貴賤之分。在DJ之中,他們都是某一個(gè)Channel。語(yǔ)義是:"Channel就是行為插入數(shù)據(jù)的管子"。每一個(gè)管子之間是平等的,而我們需要一個(gè)更加強(qiáng)壯的機(jī)制,來(lái)管理這些行為之間的相互干擾,以及對(duì)于數(shù)據(jù)的交叉讀寫(xiě)。
7、前面拐拐龍底咚說(shuō)的:"一下子想起了久違的DB觸發(fā)器",實(shí)在是深得我心。我一直認(rèn)為,在確保數(shù)據(jù)安全方面,OO的做法是愚蠢的,而DB的觸發(fā)器是一種更加靈活的方案。但是傳統(tǒng)數(shù)據(jù)庫(kù)中的觸發(fā)器,缺少對(duì)行為相互干擾之間的管理,而是純粹只關(guān)心了數(shù)據(jù)的安全。因此,我一直在設(shè)想,如果我的DJ能夠成為某種PL/SQL的直接擴(kuò)展,也許是更加自然的一種實(shí)現(xiàn)方案。
8、徐Rx的C/C++回憶我也很贊同,我曾經(jīng)跟一個(gè)朋友說(shuō)過(guò)一句話:"框架就是弱語(yǔ)言,而語(yǔ)言就是強(qiáng)框架"。我現(xiàn)在所在的公司,做的那個(gè)樂(lè)酷網(wǎng)絡(luò)電視錄像機(jī),背后的業(yè)務(wù)邏輯支撐框架,就是按我的DJ的思路來(lái)做的,叫做DOOP。面向動(dòng)態(tài)對(duì)象的編程。應(yīng)該這么說(shuō),是先有了DOOP的開(kāi)發(fā)實(shí)踐,才有了后來(lái)更進(jìn)一步語(yǔ)言化的打算。
9、我對(duì)于DJ的定位,是一種業(yè)務(wù)邏輯層的描述語(yǔ)言,而其它的方面,它肯定都不擅長(zhǎng),比如界面層,比如網(wǎng)絡(luò)層。因此,我的看法是,在現(xiàn)在的多層架構(gòu)的體系下,拋開(kāi)"確切所處的層次來(lái)談重用",肯定是用不好的。也可以這么說(shuō),你不可能找到一個(gè)方案,能夠一舉解決整個(gè)系統(tǒng)的重用性問(wèn)題。必須區(qū)分技術(shù)領(lǐng)域、區(qū)分系統(tǒng)層次,區(qū)分不同的規(guī)模尺度。然后才能來(lái)談重用。這樣才可能成功的。
posted on 2005-11-28 22:45
讀書(shū)、思考、生活 閱讀(1134)
評(píng)論(2) 編輯 收藏