第10期:報表的數(shù)據(jù)計算層
我們在上一期已經(jīng)解釋了報表應(yīng)用結(jié)構(gòu)中數(shù)據(jù)計算層的必要性,以及可以使用報表工具自定義數(shù)據(jù)源接口來實現(xiàn)計算層。在計算層中要完成一些復(fù)雜的計算邏輯,因此要有可編程的能力,而基于自定義接口可以采用報表工具的宿主語言(即用于開發(fā)報表工具的程序設(shè)計語言)進行開發(fā),在功能方面沒有問題,不過,實際應(yīng)用中卻仍有不少缺陷。更好的方式是實現(xiàn)一個顯式的數(shù)據(jù)計算層,在其中提供可解釋執(zhí)行的腳本功能,把數(shù)據(jù)源計算獨立出來。
我們從四個方面來分析后者的優(yōu)勢。
代碼編寫
報表工具的宿主語言一般是Java、C#等高級語言,這類語言針對結(jié)構(gòu)化數(shù)據(jù)集的支持很有限,雖然都能做,但卻非常繁瑣,簡單做個求和運算都需要寫數(shù)行代碼的循環(huán)來實現(xiàn)。而報表數(shù)據(jù)源處理則大量涉及批量數(shù)據(jù)運算,采用高級語言開發(fā)時會導(dǎo)致動輒數(shù)百行的冗長代碼,編寫和調(diào)試都很困難。
專門為數(shù)據(jù)計算設(shè)計的腳本則能夠提供豐富的結(jié)構(gòu)化數(shù)據(jù)集運算功能,可以很方便地實現(xiàn)批量數(shù)據(jù)計算。代碼更短不僅是工作量更少、調(diào)試方便,而且還有利于整體了解和把握算法。如果語言設(shè)計得好,大多數(shù)報表的數(shù)據(jù)源準備算法都可以在一屏內(nèi)實現(xiàn),整個算法過程一目了然。
應(yīng)用耦合
報表的呈現(xiàn)式樣是由報表工具繪制的模板來控制,報表模板一般以文件形式存放在文件系統(tǒng)中。如果數(shù)據(jù)準備采用自定義數(shù)據(jù)源實現(xiàn),這部分代碼將作為應(yīng)用程序的一部分被一起編譯和打包。呈現(xiàn)模板和數(shù)據(jù)集算法作為同一個報表的兩個關(guān)鍵要素必須合理配合才能正常工作,但物理上卻會分存于兩處,甚至可能是不同人員開發(fā)的,這給修改維護報表帶來麻煩,需要刻意去保持兩處的一致性。
獨立計算層的計算腳本和報表模板一樣,都是解釋執(zhí)行的,腳本也可以文件形式與和報表模板放在一起,報表維護時很容易保證這兩部分一致,這方面不存在應(yīng)用耦合問題。
熱切換
報表的數(shù)據(jù)集算法如果使用自定義數(shù)據(jù)源實現(xiàn),那就會成為應(yīng)用程序的一部分,發(fā)生修改時就需要和整個應(yīng)用程序一起重新編譯打包,并且在大多數(shù)情況時需要將應(yīng)用停機后再重啟。而報表是個業(yè)務(wù)穩(wěn)定性相對較差的功能,經(jīng)常會增加和修改,這樣就會導(dǎo)致應(yīng)用程序頻繁重啟。雖然Java等開發(fā)機制也支持熱加載,但使用復(fù)雜,大多數(shù)應(yīng)用程序員難以掌握。而且一旦加載后的程序就不會被清除,即使不再有用也會一直占據(jù)內(nèi)存,熱加載技術(shù)并不很合適應(yīng)用于報表數(shù)據(jù)源。
類似地,熱切換對于使用獨立計算層的腳本也不再是問題,有報表修改只要修改呈現(xiàn)模板和相應(yīng)的計算腳本。因為腳本是解釋執(zhí)行的,應(yīng)用程序本身并不需要改變,也就沒有必要停機重啟。被修改的報表在訪問時臨時計算即可。
開發(fā)人員
使用Java等高級語言實現(xiàn)報表數(shù)據(jù)集準備時,需要在代碼中引用數(shù)據(jù)庫連接、基礎(chǔ)類庫等各種環(huán)境信息,還要了解和遵循整個應(yīng)用程序的代碼規(guī)范以保持協(xié)調(diào),這常常是項目組中的專業(yè)程序員才能掌握的技能。而開發(fā)報表數(shù)據(jù)集只要了解數(shù)據(jù)結(jié)構(gòu)和運算邏輯,其實用戶方有不少技術(shù)人員都擁有這個能力,但苦于難以理解開發(fā)環(huán)境而很難自由實現(xiàn)新的報表。
有獨立計算層時,報表開發(fā)需要的各種環(huán)境信息可以事先在應(yīng)用程序中配置好,使用腳本編程時也不必關(guān)心整個應(yīng)用的代碼規(guī)范,報表開發(fā)人員只要關(guān)心數(shù)據(jù)結(jié)構(gòu)和運算邏輯,可以用于開發(fā)報表的人員更多,以適應(yīng)報表頻繁修改的業(yè)務(wù)特性。
【本文為51CTO專欄機構(gòu)“數(shù)據(jù)蔣堂”的原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】