PC的blog

          Finding... Thinking... Solving...

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            9 Posts :: 0 Stories :: 54 Comments :: 0 Trackbacks

          我的評(píng)論

          @zhuxing

          有些年頭了,不過(guò)寫java代碼還沒超過(guò)10年,你呢?

          你覺得這樣做繁瑣,請(qǐng)問(wèn)如何做才簡(jiǎn)單?能不能貼出你認(rèn)為簡(jiǎn)單的代碼?有時(shí)候旁觀和自己動(dòng)手做的感覺是完全不一樣的。還有,別忘了要把簡(jiǎn)單留給使用你代碼的人,而把繁瑣留給自己。

          有msn么?咱倆好好聊聊。:-)
          @zhuxing

          那個(gè)反射主要是為了分析@FactoryMethod注釋,用意很清晰:減少不必要的編碼。狀態(tài)增加后,程序員只需要增加一個(gè)帶@FactoryMethod的方法就行了。
          申請(qǐng)加入,謝謝。

          ID: polygoncell
          @zhuxing

          我又仔細(xì)的考慮了一下,覺得靜態(tài)方法在這里并不適用,因?yàn)槲覀冃枰槍?duì)不同的狀態(tài)寫出完全不同的邏輯來(lái)處理狀態(tài)。靜態(tài)方法通常適用于參數(shù)實(shí)例繁多而邏輯相同的情況。
          @隔葉黃鶯

          這位兄弟挺逗的!呵呵。那個(gè)4是怎么得來(lái)的?

          兄弟沒必要這么針對(duì)我吧,我沒招惹你吧。真的是做個(gè)實(shí)驗(yàn),你可以看看我以前的文章。

          哦,對(duì)了,樓上眾位兄弟哪位能夠幫我分析一下:我應(yīng)該有如何處理自己原創(chuàng)的文章的自由吧? 而且看與不看全憑自愿,為什么有些朋友的反應(yīng)會(huì)這么激烈?最好那些反應(yīng)過(guò)激的朋友能站出來(lái)說(shuō)說(shuō)你們的想法,大家交換一下意見,謝謝。
          @BeanSoft

          map沒有使用一大團(tuán)if else,HashMap的代碼如下:

          public V get(Object key) {
          if (key == null)
          return getForNullKey();
          int hash = hash(key.hashCode());
          for (Entry<K,V> e = table[indexFor(hash, table.length)];
          e != null;
          e = e.next) {
          Object k;
          if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
          return e.value;
          }
          return null;
          }

          而且Map已經(jīng)封裝好了,對(duì)于我們使用者來(lái)說(shuō)是沒有if else的。 現(xiàn)在編碼強(qiáng)調(diào)的是粒度適度,便于測(cè)試,便于閱讀。
          @zhuxing

          理論上來(lái)說(shuō),creation method也是可以的,不過(guò)這樣一來(lái)就導(dǎo)致Performer類和過(guò)多的其他類產(chǎn)生耦合(因?yàn)樘幚砻恳粋€(gè)狀態(tài)需要用到完全不同的類),我用factory就是為了保持performer干凈。要是一定要用creation method的話,performer都可以省了,直接寫一個(gè)復(fù)雜的enum,而每一個(gè)enum實(shí)例正好就是creation method。
          @Unmi

          我也就是這次試驗(yàn)一下這么寫,效果不好的話會(huì)考慮下次換個(gè)方式。
          @千里冰封

          呵呵,可別超過(guò)3個(gè)。 對(duì)了,你的那個(gè)音樂(lè)播放器挺不錯(cuò)的。
          呵呵,大家的反應(yīng)很激烈啊!

          我這里只是使用一個(gè)簡(jiǎn)單的例子來(lái)解釋如何使用重構(gòu)來(lái)移除if else,實(shí)際應(yīng)用邏輯當(dāng)然要復(fù)雜很多。

          的確有一些程序員覺得一個(gè)方法里面使用一大堆if else很方便,其實(shí)這只是對(duì)他自己方便,別人閱讀他的這一大堆if else會(huì)很頭疼。

          我這樣重構(gòu)看似增加了代碼量,實(shí)則封裝了大量的技術(shù)細(xì)節(jié)。

          建議大家去讀讀refactoring to patterns這本書,書中就講到了一個(gè)結(jié)對(duì)重構(gòu)(該書的作者和一個(gè)程序員)的例子,最開始那個(gè)程序員也覺得重構(gòu)完后,代碼量明顯增加,他很不爽,但是后來(lái)他熟悉了那些模式后才發(fā)現(xiàn)他以前的做法是錯(cuò)誤的,應(yīng)該進(jìn)行這樣的重構(gòu)。
          re: Hibernate user type polygoncell 2008-03-29 00:19  

          本書的命題是“入門和精通”,網(wǎng)上提供的章節(jié)僅僅是入門級(jí)別的內(nèi)容,是為那些完全沒有Hibernate基礎(chǔ)的同學(xué)準(zhǔn)備的。 那些已經(jīng)了解Hibernate的同學(xué)一定會(huì)覺得這些章節(jié)很乏味,這是很正常的,因?yàn)槟銈円呀?jīng)掌握了這些入門級(jí)別的內(nèi)容,再看一遍,自然乏味。但是請(qǐng)你們?yōu)槟切膩?lái)沒有接觸過(guò)Hibernate的同學(xué)考慮一下,他們非常需要一個(gè)相對(duì)淺顯易懂的臺(tái)階來(lái)幫助他們“入門”。這就是我撰寫前幾章入門內(nèi)容的初衷。

          對(duì)于那些已經(jīng)了解Hibernate的朋友們,請(qǐng)你們靜下心來(lái)閱讀后面深入內(nèi)核的章節(jié),在這些章節(jié)中,我是從構(gòu)架的角度講解了Hibernate的幾個(gè)主要的模塊,舉例印證,圖文并茂,大部分內(nèi)容源于實(shí)際項(xiàng)目。如果通讀完全書,還有朋友認(rèn)為這本書“不怎么樣”,那么我作為這本書的作者,在這里誠(chéng)心誠(chéng)意的期盼著你們的寶貴意見,對(duì)于正確的意見,我將會(huì)在本書的后續(xù)版本中加以采納。

          不論如何,非常感謝大家對(duì)本書的關(guān)注。
          主站蜘蛛池模板: 济阳县| 灵寿县| 明光市| 绥德县| 邵东县| 浦东新区| 罗平县| 句容市| 咸丰县| 富川| 金湖县| 安龙县| 克拉玛依市| 和顺县| 阿勒泰市| 哈密市| 苗栗市| 外汇| 五峰| 尉犁县| 崇州市| 葫芦岛市| 金湖县| 马龙县| 佳木斯市| 洛阳市| 永年县| 靖西县| 麻城市| 甘泉县| 定远县| 石阡县| 兰考县| 南宁市| 芜湖县| 吴川市| 阳山县| 湟源县| 府谷县| 太白县| 长顺县|