天天看點

一次"失敗的"SQL開發經曆

原創: 丶平凡世界

公衆号:SQL資料庫開發

原文連結:

https://mp.weixin.qq.com/s/z4I16VNgZsqdhbp0AwfTvQ
一次"失敗的"SQL開發經曆

最近一直在忙公司的一個SQL項目,好久都沒有給小夥伴們寫原創文章了。

趁着項目上線的空閑,給大家總結一下,在開發項目過程中遇到的一些問題。之是以說它是"失敗的"項目,是因為遇到的一些問題是完全可以避免,即使最後按要求完成了任務需求。

項目背景

公司新上線了一套OA系統,希望将公司成本類的真實資料實時反應到報表上,并且使用新的OA系統來呈現。希望從各個角度監控公司在産品開發上所花的成本情況。

已有資源

成本類的部分資料已經存在于BI報表平台,每天都有更新,這些業務邏輯的名額可以直接從BI報表平台擷取。

待開發内容

此次項目開發需求新增了不同時期的名額對比,部分名額的經營曲線。

一次"失敗的"SQL開發經曆

遇到的問題

1、需求未明确

在項目開發過程中,因為是公司内部開發,沒有明确的需求文檔,都是依靠口口相傳,或通過郵件等來确認名額定義。

可能有些同學對需求這方面不太了解,覺得我表述清楚,你做出來就是了呀。道理是這個道理,但是這個做出來的過程,如果有很多不确定的因素存在,那麼就會極大的影響開發效率。

在每開發一個名額之前,總是需要人再三确認才能開始寫代碼。開發過程中還是遇到一個“我以為”是這樣,而實際上并非是這樣的名額。導緻之前寫的邏輯需求推翻重寫。

2、整體未規劃好

整個項目,看着不大,無非就是新增幾個版本對比和一些曆史記錄曲線而已。正是由于這種想法,導緻一開始沒有一個整體的規劃,代碼寫到哪裡就是哪。

原本有一些可以複用的代碼,最後還是一個個單獨使用。導緻後續因為修改代碼邏輯,得一個一個的全部再修改一遍。

如果前期規劃好,可以将能複用的代碼做成視圖,把其他邏輯需要的字段予以保留,在開發其他邏輯時直接使用該視圖即可。

例如,有一個總成本費用,需要看到各個項目的總成本,各個區域公司的總成本,以及集團的總成本。從項目——>區域公司——>集團這是一個非常清晰的向上彙總邏輯。

隻需要把項目的總成本做成視圖,在取區域公司和集團的資料時,向上彙總項目的總成本即可。

一次"失敗的"SQL開發經曆

但因為沒有做前期規劃,從一開始做成了從集團——>區域公司——>項目的邏輯,導緻每一個都是獨立的代碼,這樣就浪費了很多開發時間和後續的邏輯修改時間。

3、代碼版本未控制

剛開始在沒有遇到頻繁的修改邏輯時,代碼檔案的名稱直接按照代碼的功能進行了命名。等到後來邏輯頻繁的修改後,儲存的代碼檔案越來越多,名稱也越來越亂。因為沒有使用版本控制,已經分不清最後正确的檔案是哪個了。

說到底還是對項目開發不夠重視,比較随性,當然這也有項目整體規劃不足的原因。

如果在一開始就想到這些問題,給每個邏輯代碼加一個版本編号就可以很好區分問題了,同時也可以做好版本對比。

一次"失敗的"SQL開發經曆

可取之處

1、業務邏輯清晰,注釋完整

不管業務邏輯如何修改,每次修改後的代碼,都會在其中更新目前代碼的功能和注釋,以防下次更新時不知道代碼片段意義。

但是與标準的代碼聲明還是有差别,标準的代碼聲明如下:

/*

代碼功能:XXXX

作者:XXX

修改人:XXX

建立日期:XXXX

修改日期:XXXX

*/

--代碼片段功能注釋

SQL代碼

SQL代碼 ...

由于整個項目由我負責,是以沒有寫作者和修改日期等内容。

2、代碼執行效率較高

雖然開發的項目資料量較小,但是考慮到未來資料量增多帶來的效率問題,代碼統一做了優化處理。

最基本的優化處理方法就是減少傳回的資料行,盡量保持代碼的簡潔。具體的優化方法可以檢視公衆号裡的曆史文章,這裡就不贅述了。

3、将所有功能單獨做成視圖

由于要内嵌到OA系統,減少代碼在OA系統上産生不可預見的異常,将報表的所有邏輯功能均建立為視圖,OA系統直接查詢視圖即可傳回所需的資料。

類似這種跨系統之間的資料傳輸,視圖是比較好的規避異常的方式,在排查異常時隻需檢查視圖上的查詢邏輯即可。

反思

從上面的問題可以發現,一個優秀的項目:

首先要明确業務需求,磨刀不誤砍柴工,需求不明确乃開發大忌;

其次需要有一個整體的規劃然後才能實施,什麼地方可以簡化開發步驟,什麼地方可以優化需要安排好;

最後要對代碼的版本進行控制,不管是使用工具,還是在做一些小項目手動控制。

總結

從這個簡單的項目中發現,我在開發方面能力尚可,但是項目管理方面的經驗不足。導緻開發效率較低,這也為以後開發新的項目做了一個很好的警醒。

從失敗中總結,從失敗中成長,希望這個“失敗的”項目對你有所啟發和幫助。