Spring Framework 的理解以及可維護(hù)性是否得以改善的思考

          Spring的特性:
          1. 提供了一種管理對(duì)象的方法,可以把中間層對(duì)象有效地組織起來(lái)。一個(gè)完美的框架“黏合劑”。
          2. 采用了分層結(jié)構(gòu),可以增量引入到項(xiàng)目中。
          3. 有利于面向接口編程習(xí)慣的養(yǎng)成。
          4. 目的之一是為了寫(xiě)出易于測(cè)試的代碼。
          5. 非侵入性,應(yīng)用程序?qū)pring API的依賴(lài)可以減至最小限度。
          6. 一致的數(shù)據(jù)訪問(wèn)介面。
          6. 一個(gè)輕量級(jí)的架構(gòu)解決方案。

          對(duì)Spring的理解
          Spring致力于使用POJOs來(lái)構(gòu)建應(yīng)用程序。由框架提供應(yīng)用程序的基礎(chǔ)設(shè)施,將只含有業(yè)務(wù)邏輯的POJOs作為組件來(lái)管理。從而在應(yīng)用程序中形成兩條相對(duì)獨(dú)立發(fā)展的平行線,并且在各自的抽象層面上延長(zhǎng)了各自的生命周期。

          Spring的工作基礎(chǔ)是Ioc。Ioc將創(chuàng)建對(duì)象的職責(zé)從應(yīng)用程序代碼剝離到了框架中,通常2中注入方式:setter 和 ctor參數(shù)。
          每個(gè)Bean定義被當(dāng)作一個(gè)POJO(通過(guò)類(lèi)名和JavaBean的初始屬性或構(gòu)造方法參數(shù)兩種方式定義的Bean)。
          Spring的核心在org.springframework.beans,更高抽象層面是BeanFactory. BeanFactory是一個(gè)非常輕量級(jí)的容器。

          關(guān)于可維護(hù)性的思考
          Spring之類(lèi)的技術(shù)確實(shí)帶來(lái)了應(yīng)用系統(tǒng)的可維護(hù)性的提高嗎?
          Ioc, AOP之類(lèi)的技術(shù),本質(zhì)上都是將原本位于應(yīng)用程序代碼中"硬編碼"邏輯,剝離出來(lái)放到了配置文件中(或者其他形式)。主流聲音都是認(rèn)為提高了應(yīng)用程序的可維護(hù)性。

          但如果從以下方面觀察,結(jié)合項(xiàng)目實(shí)際經(jīng)驗(yàn),個(gè)人感覺(jué)這些技術(shù)的應(yīng)用大大降低了應(yīng)用程序的可維護(hù)性,尤其是面對(duì)一個(gè)陌生的系統(tǒng),或者項(xiàng)目人員變動(dòng)頻繁的時(shí)候。
          1. 中斷了應(yīng)用程序的邏輯,使代碼變得不完整,不直觀。此時(shí)單從Source無(wú)法完全把握應(yīng)用的所有行為。
          2. 將原本應(yīng)該代碼化的邏輯配置化,增加了出錯(cuò)的機(jī)會(huì)以及額外的負(fù)擔(dān)。
          3. 時(shí)光倒退,失去了IDE的支持。在目前IDE功能日益強(qiáng)大的時(shí)代,以往代碼重構(gòu)等讓人頭痛的舉動(dòng)越來(lái)越容易。而且IDE還提供了諸多強(qiáng)大的輔助功能,使得編程的門(mén)檻降低很多。通常來(lái)說(shuō),維護(hù)代碼要比維護(hù)配置文件,或者配置文件+代碼的混合體要容易的多。
          4. 調(diào)試階段不直觀,后期的bug對(duì)應(yīng)階段,不容易判斷問(wèn)題所在。
          5. 性能問(wèn)題。雖說(shuō)硬件性能日新月異,但是性能也是在不經(jīng)意間一點(diǎn)一點(diǎn)地流失的。從匯編到高級(jí)語(yǔ)言,到面向?qū)ο螅教摂M機(jī),一直處于這樣的發(fā)展趨勢(shì)。

          Feedback

          # re: Spring Framework 的理解以及可維護(hù)性是否得以改善的思考[未登錄](méi)  回復(fù)  更多評(píng)論   

          2008-07-07 18:17 by 英雄
          對(duì)你提到的spring大大降低了應(yīng)用程序的可維護(hù)性,我有幾點(diǎn)爭(zhēng)議:
          我們的應(yīng)用說(shuō)到底就類(lèi)似是一本說(shuō)明書(shū)。spring利用ioc,aop兩個(gè)概念,其實(shí)給出了說(shuō)明書(shū)的表述結(jié)構(gòu)。IOC給出了對(duì)象的生命周期描述框架(類(lèi)似說(shuō)明書(shū)中出現(xiàn)的目錄),AOP給出了橫切式的描述方式(類(lèi)似說(shuō)明書(shū)中出現(xiàn)的附注)。剩下的部分,我們就開(kāi)始在IOC的基礎(chǔ)上描述系統(tǒng)啟動(dòng)后要建立哪些對(duì)象,對(duì)象間如何相互引用,每個(gè)對(duì)象是隨叫隨生還是保持唯一,每個(gè)對(duì)象提供哪些服務(wù),具體實(shí)現(xiàn)的細(xì)節(jié);我們還要時(shí)不時(shí)加點(diǎn)附注,主要是事務(wù)控制。這些描述之后,再加上spring對(duì)web層的薄薄的封裝描述(類(lèi)似閱讀須知罷),整個(gè)說(shuō)明書(shū)描述結(jié)束。
          所以從這個(gè)角度,我認(rèn)為spring的這兩項(xiàng)技術(shù)應(yīng)用,使應(yīng)用程序的邏輯標(biāo)書(shū)更加簡(jiǎn)潔清晰完整。至于一部分描述出現(xiàn)在配置文件中這只是個(gè)形式,并沒(méi)有什么問(wèn)題。
          關(guān)于spring的配置文件,即使不能找到一些插件啊之類(lèi)的工具來(lái)管理,也可以自己寫(xiě)一些東西來(lái)幫助管理。如果你所在的項(xiàng)目還在手工書(shū)寫(xiě)和維護(hù)配置文件,而且是巨大的配置文件,那確實(shí)是非常頭大的。
          IOC+AOP不僅僅給出了一個(gè)完整的描述結(jié)構(gòu),同時(shí)這兩個(gè)大模式也強(qiáng)有力地規(guī)范了代碼,統(tǒng)一了程序員的編程方式,應(yīng)該說(shuō)合理地使用spring能帶來(lái)類(lèi)間的高度解耦,保證享受到面向?qū)ο螅嫦蚍矫婢幊虒?shí)踐的好處。

          # re: Spring Framework 的理解以及可維護(hù)性是否得以改善的思考  回復(fù)  更多評(píng)論   

          2008-07-08 19:40 by ek
          寫(xiě)的不錯(cuò),的確實(shí)用。
          既然路過(guò)這里,推薦一個(gè)jee視頻學(xué)習(xí)的網(wǎng)站
          http://bbs.langsin.com/index.php?fromuid=172

          # re: Spring Framework 的理解以及可維護(hù)性是否得以改善的思考  回復(fù)  更多評(píng)論   

          2008-07-17 23:08 by bluoy
          @英雄
          謝謝你的精彩回復(fù)。
          確實(shí),我當(dāng)然也感受到了spring帶來(lái)的種種好處,就好像從匯編到C,從過(guò)程到OO一樣,軟件進(jìn)化進(jìn)程的每一環(huán)節(jié)都確實(shí)給許多開(kāi)發(fā)者帶來(lái)了好處。

          本文主要是想換個(gè)角度思考一下。在這里,我和你的觀點(diǎn)恰好相反了,我認(rèn)為就是因?yàn)樾问缴系牟灰恢拢o開(kāi)發(fā)者帶來(lái)了很多困惑。尤其是用配置語(yǔ)法來(lái)描述程序邏輯,而目的僅僅是為了滿足許多憑空想象的,子無(wú)虛有的靈活性,可配置性(好像敏捷開(kāi)發(fā)所抵制的一樣),打斷了過(guò)程中的連續(xù)性。

          再好比現(xiàn)在多如牛毛的各種中間件,本意都是好的,代碼復(fù)用,提高開(kāi)發(fā)效率,代碼質(zhì)量。但現(xiàn)實(shí)往往與預(yù)期相反,開(kāi)發(fā)者首先需要想學(xué)習(xí)一大堆中間件。學(xué)習(xí)曲線并未降低,項(xiàng)目進(jìn)度并未改善,項(xiàng)目質(zhì)量也乏善可陳。

          也許,事物就是在矛盾中發(fā)展的吧,所謂有利就有弊嘛。

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 施秉县| 盐源县| 德兴市| 驻马店市| 涞水县| 万宁市| 高尔夫| 绩溪县| 绥宁县| 巨野县| 略阳县| 青河县| 开江县| 甘肃省| 思茅市| 绵阳市| 苍溪县| 云阳县| 卓尼县| 镇巴县| 玉山县| 潞城市| 仁寿县| 日照市| 兴城市| 博乐市| 新邵县| 察雅县| 介休市| 河池市| 玉屏| 东海县| 桂阳县| 中西区| 玛曲县| 大竹县| 隆昌县| 漯河市| 衡阳市| 宿迁市| 科技|