注释不好吗?
前幾天,我在有關(guān)Spring XML與注釋的文章中運(yùn)用了自己的原則,輕松進(jìn)入了這個(gè)主題。 對(duì)于我目前正在編寫此新應(yīng)用程序的團(tuán)隊(duì)來(lái)說(shuō),這種簡(jiǎn)單的輸入方式也是我不會(huì)使事情復(fù)雜化的方式,該應(yīng)用程序的生產(chǎn)壽命可能為3-5年(如果我們做得對(duì),并希望技術(shù)世界成真)不會(huì)改變它的頭)。
從1.1開始,我一直在使用Spring Days,所以是的,我對(duì)使用非常大和復(fù)雜的XML感到很滿意。 但是,我知道如何寫它們,更重要的是,我知道如何閱讀它們。 從那時(shí)起,Spring使開發(fā)人員易于理解它們-帶有Beans Explorer / Graph的Spring STS。 現(xiàn)在,開發(fā)人員無(wú)需擔(dān)心查看多個(gè)XML,這些工具甚至可以為他們編寫和管理bean來(lái)完成工作。
為了提高開發(fā)人員的生產(chǎn)力,短期內(nèi)我們會(huì)犧牲編寫優(yōu)質(zhì)性能代碼的技巧
自從我看到Spring 3.x引入了基于注釋的配置這一概念以來(lái),使用這些注釋而不是使用XML的炒作至少已有7年之久(如果我沒記錯(cuò)的話)。 我無(wú)法通過(guò)改變方向來(lái)實(shí)現(xiàn)和平。
不說(shuō)不好 ,但是此功能幾乎沒有被社區(qū)濫用,而是Spring一直在推廣濫用行為。 今天的任何Spring文檔都只討論注釋樣式的編碼,然后再遵循“經(jīng)典XML方式”進(jìn)行處理。
人們說(shuō)– 閱讀代碼 更容易,使用批注中的代碼調(diào)試代碼更容易 ,他們忘記了代碼中不再是什么代碼–他們?cè)诖a中嵌入了配置。 據(jù)我所知,配置應(yīng)該被外部化。 在我們使用Hibernate和JPA之類的ORM框架的情況下,問(wèn)題更加嚴(yán)重。
即使在原始的Spring設(shè)計(jì)中,甚至在使用XML的情況下,我都覺得設(shè)置Spring應(yīng)用程序的方式并不是Spring設(shè)計(jì)的目的。 是時(shí)候讓我去了解羅德·約翰遜(Rod Johnson )在設(shè)計(jì)Spring時(shí)的想法了(我知道一點(diǎn),但我需要找到一些細(xì)節(jié)并深入了解)。 但這就是另一天。
因此,讓我們看一下該博客文章 ,其中解釋了如何將JPA與Spring一起使用或閱讀此StackOverFlow線程 。 很好,他們都解釋了如何使用,但是很快我們意識(shí)到,但是在代碼中使用這些所謂的基于Rich Annotation的配置,我們已經(jīng)淡化了代碼/設(shè)計(jì)應(yīng)該是的總體含義。 當(dāng)我必須嘗試一些新的事物作為個(gè)人寵物項(xiàng)目以快速起步時(shí),這種編程風(fēng)格非常有用–我可以編寫一堂課,鍵入一些注釋并Swift做好準(zhǔn)備進(jìn)行CRUD的工作,但這確實(shí)有效在企業(yè)級(jí)應(yīng)用程序中,尤其是在生產(chǎn)中如何進(jìn)行管理。
這些文章不過(guò)是一堆希望我們使用這些框架和新功能的市場(chǎng)營(yíng)銷/銷售推銷,但它們幾乎沒有將我們?cè)诖笮蜕a(chǎn)系統(tǒng)中必須處理的復(fù)雜情況置于上下文中。
在2007年,我們?cè)陧?xiàng)目中廣泛使用了休眠模式(帶有基于XML的Spring 2.x配置),很快我們意識(shí)到,ORM框架已經(jīng)超越了它的范圍。 我們遇到了復(fù)雜的查詢,試圖將其改編到Hibernate中,并且有可能在MS-SQL中將其編寫為優(yōu)化的過(guò)程,并且消除這些查詢現(xiàn)在已成為主要瓶頸。 我剛接觸過(guò)該框架,但更重要的是,我的技術(shù)領(lǐng)導(dǎo)者曾全力使用Hibernate。 這些人可以訪問(wèn)我之前分享的文章,這看起來(lái)很可行,但是他們只是銷售Hibernate和ORM帶來(lái)的功能的營(yíng)銷材料。 當(dāng)我遇到麻煩時(shí),我不得不回頭去重構(gòu)代碼,并遵循良好的舊查詢編寫方法。
這些使用注解的框架在90%的情況下都能很好地工作,但是當(dāng)這些注解失敗時(shí),您需要系統(tǒng)在壓力下執(zhí)行的那10%正是
現(xiàn)在回溯到Spring和Annotations –為什么我不喜歡它們? 僅僅是因?yàn)樗鼈兪刮蚁裨趯W(xué)習(xí)某個(gè)東西的大學(xué)生一樣編寫代碼。 他們迫使我擺脫過(guò)去黃金時(shí)代的良好做法。 是的,它過(guò)去花費(fèi)一些時(shí)間來(lái)建立一些類,并且花費(fèi)時(shí)間來(lái)編寫SQL查詢,但是我在正確的地方放置了正確的東西。 是的,我們花了很多時(shí)間才能蓄勢(shì)待發(fā),但是一旦我們緊緊設(shè)置了這些基礎(chǔ)知識(shí),不僅可以提高開發(fā)速度,而且還可以正確地完成任務(wù)。
是的,沒有人可以強(qiáng)迫我們,但是普通的Joe開發(fā)人員或普通的Jim建筑師沒有時(shí)間和意愿來(lái)制作這些POV,他們?cè)贕oogle上進(jìn)行搜索,當(dāng)他們看到5篇文章說(shuō)同樣的話時(shí),他們認(rèn)為這是做正確的事,他們會(huì)快樂(lè)地前進(jìn)。 我們的許多高級(jí)技術(shù)人員也閱讀了這些文章,為設(shè)計(jì)提供了支持,并且多次挑戰(zhàn)了我要放在此處的觀點(diǎn)。
TLDR;
考慮一下,請(qǐng)不要使用注釋來(lái)配置您的應(yīng)用程序。 配置從來(lái)都不打算成為代碼的一部分-之所以稱為配置。 所以,讓我們成為現(xiàn)實(shí)。 短期內(nèi)獲得少量收益不會(huì)大有幫助,特別是當(dāng)客戶要求更改表或值并且您告訴他這將需要5天的開發(fā),測(cè)試和部署時(shí)。
翻譯自: https://www.javacodegeeks.com/2015/08/are-annotations-bad.html
總結(jié)
- 上一篇: 一招教你用电脑系统修复硬盘如何修复电脑硬
- 下一篇: ivy maven_将Maven与Ivy