国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關注微信公眾號

Oracle數據庫PL/SQL編碼規則總結
2007-04-11   IT專家網

提高編寫PL/SQL代碼數量及質量的四個簡單易行指導方針……

  我從1990年就開始編寫PL/SQL代碼。這意味著我已經編寫了幾萬行的軟件代碼,但我確信,其中的絕大多數代碼都非常拙劣,而且難以維護。

  幸運地是,我發現找到并遵循編寫出更好代碼的新方法還為時不晚。就是在去年,我的代碼質量有了顯著改進;這些改進主要是由于制定了一些簡單的規則,并像紀律一樣加以遵守。

  本文為PL/SQL新手及有經驗的開發人員提出了四條建議;遵守其中任何一條,你的代碼質量都會有提高。這四點建議都采納,你可能會驚奇地猛然發現:你竟然是一個非常好的程序員,要遠遠超乎你的想象。

  所有工作都獨自完成

  我們很少有人是孤立工作的;大多數PL/SQL開發工作是在相對較大的機構中進行的。但我們基本上還是在自己的小隔間里用自己的設備獨自工作。幾乎沒有PL/SQL開發小組進行正規的代碼復查或系統測試。

  我不可能通過這篇文章改變你們開發小組的基本狀態。因此,我仔細地選取出以下幾點建議。實施其中任何一點并不需征得管理人員同意。不論你的小組是大是小,都不必讓其中的每個人都贊同這些編碼規則。你只需按以下建議來改變你的本人的編碼方式:

  •   1. 嚴格遵循命名約定,好像它們就是你的生命支柱。
  •   2. 戒除編寫SQL的嗜好:編寫的SQL越少越好。
  •   3. 使執行部分短小:告別"意大利面條式的代碼"。
  •   4. 找一位伙伴:非常贊同找個人來監督你的工作。

  1. 遵循命名約定

  如果你建立并嚴格遵循一套命名約定,特別是對于應用程序組件的,你就可以節省很多時間。

  當然,遵循命名約定的想法并沒有什么新意,你可能已經聽煩了。所以我并不提出什么宏偉的命名計劃,而是給出一些非常具體而明確的約定,然后證明這些約定會多么有用。

  前幾個月我一直在為PL/SQL開發人員設計、構建一種新工具。它名為Swyg(可以在www.swyg.com中找到),可以幫助程序員完成代碼的生成、測試及重用的工作。它具有幾個獨特的組件。我為每個組件指定了一個由兩個字母組成的縮寫名稱,如下所示:

  •   SF-Swyg的基礎部件
  •   SM-Swyg的元數據
  •   SG-Swyg的生成程序
  •   SL-Swyg的代碼庫
  •   ST-Swyg的單元測試

  于是,我便遵循表1中的命名約定,同時使用這些縮寫。遵循這些約定有什么好處呢?一般來講,如果我要求一致的命名規則,我就可以更流暢更高效地編寫代碼。

  明確地說,這些約定具有可預測性,意思是說我編寫的SQL程序能生成有用的腳本。例如,通過使用表1中的約定,可以生成Swyg中所有基礎包的安裝腳本。執行這些工作的SQL*Plus腳本如清單1所示。這類腳本非常有用,因為它意味著我不必手動維護安裝腳本。當我向Swyg方案中增加另一個表,并生成一組相關包時,我只要運行我的腳本,更新后的安裝腳本便會跳出來。

提高編寫PL/SQL代碼數量及質量的四個簡單易行指導方針……

  2. 戒除編寫SQL的嗜好

  編寫的SQL越少越好,這似乎與我們的直覺不太一致。對于PL/SQL開發人員來說,這是一個奇特的建議,因為PL/SQL的主要優點之一就是可以毫不費力地在代碼中編寫SQL語句。不過,這種簡易性也是這種語言的一個致命的弱點。

  可以將純粹的SQL語句直接置于PL/SQL代碼中,而無需JDBC或ODBC之類的中間層。因此,無論何時何地,PL/SQL開發人員只要需要SQL語句,他們通常就會向其應用程序代碼中嵌入SQL語句。那么這樣做有什么問題嗎?

  在PL/SQL代碼中到處使用SQL語句必然會導致以下后果:

  盡管實際表現不同,但同一邏輯語句仍會出現重復,從而導致過多的語法分析,且難于優化應用程序的性能。

  暴露商務規則和方案。這直接在SQL語句中包含了執行商務規則的邏輯。這些規則總在變化,所以應用程序的維護成本會急劇增加。

  當然,你要編寫的每一個PL/SQL應用程序幾乎都是基于基礎表和視圖的。你需要執行SQL語句。問題不在于是否執行,而是何時執行、如何執行。

  如果你對數據結構進行封裝,或者將它們隱藏于一個PL/SQL代碼層(通常是一個代碼包)之后,那么你的應用程序將會更健壯,而且你還會發現創建和維護變得更易多了。

  我們來看一個簡單的例子。 假定我需要編寫一個處理某員工工作的程序。第一件事是獲取該員工的全名,定義為"姓名逗號(,)姓";然后我可以進行詳細分析。清單2給出了這種情況下我很可能要編寫的這類代碼的一個示例。

  一切似乎都是這么簡單和直接;這些代碼可能會有什么錯誤呢?實際上真是非常糟糕。最主要的是我暴露了一個商務規則:全名的結構。我可能要花費數小時來對此代碼及其所基于的應用程序進行測試。但就在它剛剛投入使用時,我才知道客戶會不斷地打電話告訴我,實際上,他們的全名應該表示為"名空格姓"。

  現在怎么辦?搜索所有位于引號內的單個逗號?

  現實的解決方案是使用隱藏所有細節、只提供一組預定義、預測試及預優化并能完成所有任務的程序包。清單3為基于封裝代碼重新編寫的process_employee過程。hr_employee_tp包提供了用于定義保存姓名的局部變量的類型;hr_employee_rp包含有基于一種商務規則而返回全名的函數。

  將顯示PL/SQL語句灌入SQL代碼很容易,同樣,談論封裝這些語句是如何重要也不費勁。但另一方面,編寫執行封裝任務的代碼卻具有挑戰性;甚至是不現實的。生成這些包或許更有意義。

  幾年前,我曾幫助構建這樣一個生成程序。該程序段為PL/Generator,現在由Quest Software公司擁有,PL/SQL開發社區可以免費使用。你可以從我的網站www.StevenFeuerstein.com/puter/gencentral.htm下載。要知道,其封裝體系結構與我在前面所概括的約定不同。PL/Generator創建了一個單獨的包,它包含了一個表的類型、查詢和變化邏輯的全部內容。

  當你不再編寫太多的SQL,而是調用執行SQL的程序時,無論你是生成還是編寫自己的定制封裝,你的應用程序都會受益匪淺。

3. 使執行部分短小

  面對現實吧:總是與我們的判斷和最新的一系列新年決議相左,我們必須停止編寫意大利面條式的代碼:龐大而冗長,人們實際上不可能理解它們,更不用說維護或升級了。怎樣才能避免"意大利面條"呢?

  實際上,答案很簡單:決不允許執行部分超過50或60行。這種大小使你能在一頁紙或一個屏幕上查看該代碼塊的整個邏輯結構,這也意味著你可以真實地領會該程序的意圖,而且完全憑直覺就能理解它。

  你可能非常同意上述觀點,但同時又嘲笑我的建議:程序代碼永遠不超過50行。沒錯,你應當嘲笑,因為這當然是不可能的。毫無疑問,你需要超過50行的可執行代碼;問題是你把這些代碼放在哪,以及你怎樣加以組織。

  如果采取以下做法,你的確能夠應對各種復雜的要求,并把代碼限制在50行以內:

  將所有的商務規則和離散邏輯塊置于其自已的程序(通常是函數)中,從而在任何可能的時候慎重地重用代碼。

  盡量使用在程序的聲明部分定義的局部模塊、過程和函數。

  假定我在編制一個呼叫中心應用程序。我需要編寫一個程序,它要滿足下面的要求:

  "對于特定部門的每個員工,將其工作量(分派給該員工的呼叫次數)同該部門員工的平均工作量進行比較。如果某員工的工作量低于平均工作量,便將下一待處理呼叫分派給此人,并基于這種情況安排約定。"

  我從以前的工作中獲悉:我的朋友Claudia已經編寫了一個分析包,它會返回工作量方面的信息。但是分派待處理呼叫和安排約定都是全新的工作,需求文檔的其余部分對此進行了詳細說明。

  最初我想把這15頁的內容全都看完,但我沒有那樣做。我使用了一種稱為"逐步求精法"或"由頂向下設計"的技術,并先編寫了清單4中的代碼來實現該程序。

  下面給出了清單4中最關鍵代碼行的解釋;由該程序(緊湊的執行部分)的最后開始,向上進行。這似乎有悖于直覺,但這的確是通讀用逐步求精法編寫的程序的最好方式。

  第22~30行。用一個游標FOR循環(cursor FOR loop)來對指定部門的所有員工進行迭代處理。在第24~25行,利用分析包中的程序判定當前的員工是否工作量不足。在第27~28行,調用三個程序:assign_next_open_case、schedule_case和next_appointment。我還不知道怎樣實現這些程序,但我知道它們通過其名稱和參數表表達了需要事先完成的工作。

  第10~19行。為第27~28行中的三個程序創建"stub",也就是占位程序。注意,它們是局部模塊,在assign_workload中進行定義,且不能從其他任何程序調用。

  第5~8行。定義一個游標,以獲得指定部門的所有員工?,F在可以設法編譯此代碼。

  對這樣一個小程序成功完成編譯好像是個小勝利,也的確如此。完成正確編譯,然后是簡單測試,然后增加一點代碼,再進行正確編譯,以此類推,諸如此類的小勝利締造出構造精良的程序,而且會非常滿意。

  我還可以驗證該分析程序是有效的,并且找出了要分派的任務適當雇員。這些工作全部完成后,我將從三個程序中挑出一個,比如assign_next_open_case,進行下一步或下一級別的精細設計。我要閱讀該任務的文檔,并在assign_next_open_case里編寫一個簡短的執行部分,它可反映該任務的概況。

  很快,我的局部過程有了它自己的局部過程和函數,但在該過程的每一步,我的代碼都很短、可讀、易于測試、可根據需要進行調整。

4. 找一位好伙伴

  計算機并不會編程,人才會。

  有多少次你彎著腰、駝著背坐在計算機前,因無法找出代碼中的錯誤而感到非常郁悶?先是幾分鐘過去了,接著又過了幾小時。最后,對自己都厭煩了,感到非常失敗,你把頭伸出你的小隔間并請朋友過來幫你看一看。

  通常會有下面三種情況之一出現:

  當你的朋友從她的椅子上站起來時,一切都在瞬間變得非常清楚。

  你的朋友瞥了一眼屏幕,馬上就指出了問題所在。

  你的朋友不負責該系統中你所做的部分,所以你必須說明你的程序在干什么。當你逐步講解邏輯時,引起錯誤的問題所在會突然暴露在你面前。

  事實就是自己很難調試自己的代碼,因為你自己對它太投入、太專注了。

  這個問題最好的解決辦法是由開發經理創造這樣一種文化:各種想法是共享的、不懂是可以原諒的并不會受到處罰、定期進行建設性的代碼評審。不幸的是,這些文化上的改變是難以實現的。

  與此同時,我建議在幫助改變你所在小組的文化的過程中你應起帶頭作用。找到另一位開發人員,最好比你經驗豐富,并建立一種"伙伴"關系:在出現問題時,他可以充當你的參謀,當然,你也可以充當他的參謀。事前達成共識:不知道所有問題的答案并沒有什么不對。

  然后為你自己制定一條簡單的規則:不要為一個錯誤苦思冥想超過半個小時。30分鐘過去后,把你的伙伴叫過來,讓人類心理學為你服務,而不是跟你作對。

  獲得一種新工作方式的四個步驟

  本文為你提供了可以采取的用于改變你的編程體驗四個步驟,而無須投資新的工具或改變整個小組的工作流程。這四步甚至可以不全部遵循,只要遵守一步都會讓你受益。

熱詞搜索:

上一篇:面向 Geospatial影像的商用數據庫 (PDF)
下一篇:教你通過控制網絡流量來優化局域網

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
日韩美女一区二区三区| av成人免费在线| 日韩精品乱码av一区二区| 国产亚洲成av人在线观看导航 | 精品国产免费人成电影在线观看四季 | 亚洲色欲色欲www| 国产午夜精品久久久久久久| 久久久久久久久久久久久久久99 | 91欧美一区二区| 91影院在线免费观看| 91视频你懂的| 欧美美女视频在线观看| 欧美日韩国产首页| 欧美精品乱码久久久久久按摩| 欧美亚洲综合色| 51午夜精品国产| 久久综合九色综合97_久久久| 2021久久国产精品不只是精品| 久久久一区二区| 中文字幕一区av| 婷婷成人激情在线网| 久色婷婷小香蕉久久| 精东粉嫩av免费一区二区三区| 国产剧情一区二区| 成人av资源在线| 欧美日韩一卡二卡| 精品日韩一区二区三区 | 成人一级视频在线观看| 欧美色综合网站| 日韩一级精品视频在线观看| 精品日韩成人av| 亚洲精品老司机| 麻豆一区二区在线| 色综合 综合色| 日韩免费看网站| 亚洲视频电影在线| 免费在线成人网| 91欧美激情一区二区三区成人| 欧美丝袜自拍制服另类| 精品黑人一区二区三区久久| 国产精品久久久一本精品| 亚洲国产欧美在线| 国产在线视频一区二区| 色老综合老女人久久久| 日韩欧美国产精品| 亚洲精选视频在线| 国产综合成人久久大片91| 色综合久久久久综合| 精品福利视频一区二区三区| 亚洲蜜臀av乱码久久精品| 国内成+人亚洲+欧美+综合在线| 91在线视频在线| 2020国产精品久久精品美国| 性做久久久久久免费观看欧美| 国产99久久久精品| 精品日产卡一卡二卡麻豆| 一区二区三区中文在线观看| 大陆成人av片| 精品国产1区二区| 日韩电影在线观看一区| 在线观看视频一区二区| 国产婷婷色一区二区三区在线| 奇米影视7777精品一区二区| 欧美性做爰猛烈叫床潮| 亚洲免费观看高清| 97se亚洲国产综合自在线| 国产日韩影视精品| 国产成人亚洲综合a∨婷婷图片| 日韩欧美高清在线| 日本美女视频一区二区| 欧美日韩国产高清一区二区| 亚洲午夜成aⅴ人片| 91久久精品网| 亚洲二区在线视频| 欧美美女一区二区三区| 五月天激情综合网| 日韩丝袜美女视频| 日韩激情视频在线观看| 欧美精品黑人性xxxx| 日韩精品成人一区二区在线| 91精品国产色综合久久ai换脸| 天天综合网 天天综合色| 91麻豆精品久久久久蜜臀| 午夜精品福利一区二区三区av | 欧美成人精品福利| 美女视频一区二区三区| 久久一夜天堂av一区二区三区| 久久精品国产一区二区三区免费看| 欧美日韩在线亚洲一区蜜芽| 日韩制服丝袜av| 日韩精品资源二区在线| 激情欧美一区二区三区在线观看| 久久久久久一级片| 99re亚洲国产精品| 天天av天天翘天天综合网 | 99re6这里只有精品视频在线观看| 中文字幕五月欧美| 欧美日韩亚洲综合| 久久www免费人成看片高清| 欧美国产精品一区二区| 色av成人天堂桃色av| 日本中文字幕不卡| 日本一区免费视频| 欧美午夜精品免费| 国产一区在线不卡| 亚洲精品高清在线观看| 日韩欧美中文字幕精品| 成人av电影在线观看| 亚洲成人av一区二区三区| 久久久久久久一区| 欧美视频在线观看一区二区| 麻豆91免费看| 亚洲视频1区2区| 精品国产第一区二区三区观看体验| 99久久精品情趣| 美女视频黄免费的久久 | 精品系列免费在线观看| 国产精品电影院| 日韩欧美第一区| 99精品国产视频| 免费不卡在线视频| 亚洲一区在线视频观看| 国产午夜精品久久| 日韩欧美二区三区| 欧美日韩另类一区| 成人黄色大片在线观看| 久久se精品一区精品二区| 亚洲成人精品在线观看| 国产精品久久久久久久久动漫 | 狠狠网亚洲精品| 五月婷婷综合在线| 一区二区三区加勒比av| 国产午夜精品久久久久久免费视| 日韩一区二区三区四区| 91久久国产最好的精华液| 成人开心网精品视频| 国产一区二区不卡在线| 免费看日韩精品| 首页国产欧美日韩丝袜| 亚洲成人自拍偷拍| 亚洲精品v日韩精品| 日韩理论在线观看| 国产精品福利av | aa级大片欧美| 成人免费看的视频| 国产91精品精华液一区二区三区| 激情深爱一区二区| 久久精品国产99国产| 婷婷成人综合网| 三级影片在线观看欧美日韩一区二区 | 国产精品99久| 国产乱码精品一区二区三区五月婷 | 久久99精品国产麻豆婷婷| 蜜桃精品在线观看| 久久精品久久综合| 国产精品资源在线看| 国产精品自拍一区| 不卡av电影在线播放| 成人aaaa免费全部观看| 欧美亚男人的天堂| 欧美三级电影精品| 欧美日韩mp4| 在线观看不卡视频| 欧美一区二区美女| 日韩精品最新网址| 欧美精品一区二区蜜臀亚洲| 久久久亚洲欧洲日产国码αv| 久久尤物电影视频在线观看| 久久精品男人天堂av| 国产精品久久久久久久第一福利| 国产精品嫩草99a| 亚洲一本大道在线| 秋霞午夜鲁丝一区二区老狼| 久久成人av少妇免费| 成人永久看片免费视频天堂| 91老师国产黑色丝袜在线| 欧美日韩高清一区二区三区| 日韩免费性生活视频播放| 国产精品第一页第二页第三页| 亚洲综合清纯丝袜自拍| 久久99精品久久久久婷婷| 成人禁用看黄a在线| 欧美日本一道本在线视频| 精品少妇一区二区三区在线播放| 国产精品久久久久久亚洲毛片| 亚洲国产精品久久人人爱蜜臀| 奇米色一区二区| 91在线观看高清| 欧美一区二区三区婷婷月色| 欧美激情中文字幕| 亚洲福利视频一区二区| 波多野洁衣一区| 欧美电影免费观看高清完整版在| 亚洲欧洲性图库| 精品一区二区在线免费观看| 色8久久精品久久久久久蜜| 国产午夜精品久久久久久久 | 国产盗摄视频一区二区三区| 色噜噜狠狠成人中文综合| 国产三级欧美三级日产三级99|