看過我文章的網友們都知道,一般前言都是我用來打醬油扯點閒情的。html
自從寫了上面一篇文章以後,領導就找我談話了,怕我有什麼想不開。數據庫
因此上一篇的(下)篇,目前先不出來了,哪天我異地二次回憶的時候,再分享分享。框架
話說最近外面IT行情飛漲還咋的,人都飛哪去了呢,據說各地的軍情都進入緊急狀態了。組件化
迴歸下正題,今天就抽點時間,寫寫技術文,和大夥分享一下近年在框架設計上的取的一些技術成果。編碼
在針對運營商(移動、聯通、電信、鐵塔)的信息類的系統中,因爲相關的從業人員習慣於Excel的辦公思惟。spa
致使在作該類系統中時,Excel的導入導出功能,幾乎成了每一個有列表展現的頁面上必備功能。設計
所以,有必要對Excel導入導出進行抽象並組件化設計,以致於後面佔了整個開發框架中一個很牛B的位置。htm
而這一切的演進與進化,始於如下這愈來愈變態的需求:blog
咱們都知道,要把一批數據導進系統中,最基本的作法,就是約定好導入的模板,而後針對精心設計好的模板進行編碼。開發
而客戶則按格式填寫好數據後,如無心外的就導入系統中了。
如此如此這般這般以後:
對於開發:會選擇一種最簡單開發的方式,儘可能確保每一個字段不須要特殊處理都和數據庫對的上,不用作過多的額外代碼編寫。
對於客戶:須要按指定的格式填寫數據,須要花很多時間。
後續的調研進展,客戶要親自指定模板中的列及格式。
如此如此這般這般以後:
對於開發:須要按指定的格式去開發,甚至可能缺乏某些列,要作一些額外的查詢或代碼處理。
對於客戶:能夠簡單的從其它辦公的Excel中複製數據到模板,進行簡單的修改後導入。
客戶愈來愈牛B了,認爲搞模板這東西太複雜了,既然其它系統能導出來,直接弄過去就得了。
如此如此這般這般以後:
對於開發:因爲某系統導出的Excel數據,亂七雜八,用API讀出來的數據,不符常規則,要作N多兼容處理,工做量翻了N翻。
對於客戶:從其它系統導出Excel數據,直接導進系統,真泥瑪的省心。
客戶已經超越牛A與C之間了,哥穿越七八張表,用了N個Case和GroupBy及N層子嵌套才弄出來的報表數據,你要給導回基礎表去?
如此如此這般這般以後:
對於開發:45度仰角呼喚你爺。
對於客戶:我只要某幾個字段改了能回去就行。
好簡單的說,使用 CYQ.Data 框架(很久沒在文章中介紹了,歷經幾年低調的發展,有機會再寫文)中MDataTable的批量功能,一行代碼就完事了。
麻煩開始了,兩張表就算了,但是你來2,3,4,5,6,7表,一個導入要關聯這麼多表,還得理解業務,還要分拆一對N關係,一個導入要整好幾天。
若是回頭客戶說改模板,內心瞬時多了幾草泥馬穿過。。。
又麻煩了,合併的單元頭、臥槽還有同名的列頭,難道要寫死指定第N行的列頭就A表名字,N+N行的列頭是B表的名字?
若是模板增長字段,換了位置, 內心莫名又多了幾隻草泥馬越過。。。。
模板的上面十幾行,是一大堆沒用的數據,模板的左邊和下面,是一些填寫的說明(而這些,是其它系統的數據,跟咱們作的系統有毛關係啊,但客戶就是這麼牛B)
因此,又要增長處理,從第幾行讀數據,列頭跨幾個行,右邊第N行是無效的,內心剎間又多了幾隻草泥馬踩過。。。
模板增長一個分類列就能夠搞定的事,客戶打死也不要,非要一個分類一個Sheet,而後所有導入。
因此,你得按Sheet名稱自動轉換成分類名稱,來處理這些事。
還有原來一個Sheet多表的一對N關係,要分拆到N個Sheet裏去讓你處理導入, 內心嘩嘩已無數只草泥馬踏過。。。
在正常的需求階段,理論上是應該引導用戶規避掉一些不合理的設計,但現實有時候就是被客戶牽着走。。。
所以,在面對如此這麼複雜的場景和變態要求下,若是不設計一套智能組件,則開發成本和開發人員無疑將陷入無限的悲哀中。
好在,我在。
下一文,將與大夥分享Excel的組件化的設計方案
http://www.cnblogs.com/cyq1162/p/4510710.html