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