Excel导入导出的业务进化场景及组件化的设计方案(上)
看过我文章的网友们都知道,通常前言都是我用来打酱油扯点闲情的。
自从写了上面一篇文章之后,领导就找我谈话了,怕我有什么想不开。
所以上一篇的(下)篇,目前先不出来了,哪天我异地二次回忆的时候,再分享分享。
话说最近外面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里去让你处理导入, 心里哗哗已无数只草泥马踏过。。。
在正常的需求阶段,理论上是应该引导用户规避掉一些不合理的设计,但现实有时候就是被客户牵着走。。。
因此,在面对如此这么复杂的场景和变态要求下,如果不设计一套智能组件,则开发成本和开发人员无疑将陷入无限的悲哀中。
好在,我在。
下一文,将与大伙分享Excel的组件化的设计方案
本文原创发表于博客园,作者为路过秋天,原文链接:http://www.cnblogs.com/cyq1162/p/4510710.html
云巧组件如何实现代码架构设计可视化 在项目搭建完成进行了N个迭代之后,往往因为需求的变化以及设计的缺陷导致领域模型、接口、数据库设计等和最开始的时候大为不同,架构设计需要保鲜会花去大量的时间。有没有一种办法可以实时反应项目的各种技术设计呢?就像Swagger一样,代码自动生成文档。我们采用了静态代码扫描的方案,通过代码来反应真实的技术设计,这就是《云巧工坊-应用素描》的功能。
使用云巧工坊编写业务流程并可视化 软件产品都面临业务需求、流程快速变化的现状,往往之前设计绘制的业务流程在几个月之后就会失效的问题,如果按照一定语法开发的代码可以实时正确反应业务流程就解决了业务流程保鲜的问题。yunqiao-boot-starter-flow 就是解决这一问题的开发框架。
技术方案设计的方法 前段时间接手了一个还处于方案设计阶段的工作,我重新做了设计。觉得新方案比旧方案业务清晰明朗、解决了旧方案的缺陷。我就很高兴,跟同事聊这个事情。同事就问我是怎么想到这些的呢。 我说了一些细节的,但是没有把核心本质讲出来。我觉得这是个很难回答的问题。因为一个方案怎么更合适,主要因素包含业务理解、个人经验、思维逻辑。这3个要素一般都是靠经年累月的积累才获得的。从这些中提取出别人可以学习和使用的方法确实不是一会儿就能想出来的事情。
Dataphin功能大图(三)研发:设计即研发,规范建模保障数据模型与代码的一致性 在《Dataphin核心功能: 规划功能》一文中, 讲到过Dataphin的OneModel方法论将数据建设分为四层, 分别为主题域模型(建模), 概念模型, 逻辑模型和分析模型。本文将继续展开逻辑模型和分析模型的讲解。
开发人员为什么要学会画技术架构图? 系统架构是概念的体现,是对物/信息的功能与形式元素之间的对应情况所做的分配,是对元素之间的关系以及元素同周边环境之间的关系所做的定义。
相关文章
- JavaScript日历控件开发 C# 读取 appconfig文件配置数据库连接字符串,和配置文件 List<T>.ForEach 调用异步方法的意外 ef 增加或者更新的习惯思维 asp.net core导入excel 一个二级联动
- C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序
- C# Excel文件导入操作
- 关于Excel导入(或数据库连接)的HDR=YES; IMEX=1详解
- laravel引入PhpSpreadsheet导出Excel
- 64位Win7中导入excel提示“因为 OLE DB 访问接口 'MICROSOFT.JET.OLEDB.4.0' 配置为在单线程单元模式下运行,所以该访问接口无法用于分布式查询。”
- 最全的Excel导入导出实战(通用版), 注解+反射 优雅的实现
- [转]PowerDesigner Excel 导入表结构 表及字段信息批量修改 批量删除 批量添加
- 连接excel执行Insert Into语句出现“操作必须使用一个可更新的查询”的解决
- ASP.NET Core 导入导出Excel xlsx 文件
- vue导入excel
- 《从Excel到R 数据分析进阶指南》一第1章 生成数据表1.1 导入数据表
- Java基于注解和反射导入导出Excel
- Python Excel自动化之 如何根据某一列快速对比两excel文件不同并输出不同内容
- Python Excel教程之如何将多个 excel 文件合并为一个文件(教程含源码)
- Excel VLOOKUP实用教程之 03 使用下拉列表作为查找值vlookup?(教程含数据excel)
- Dynamic CRM 2013学习笔记(三十一)自定义用excel批量导入实体数据
- 《数据分析实战:基于EXCEL和SPSS系列工具的实践》——3.3 耗时耗力的数据整理过程
- 《数据分析实战:基于EXCEL和SPSS系列工具的实践》——3.4 数据量太大了怎么办
- 【excel解析并展示在table列表】
- 将eChart图片利用POI导出到Excel
- C# NPOI 导入与导出Excel文档 兼容xlsx, xls
- 导入Excel数据到Oracle数据库的脚本
- 用EXCEL导入QC需求和测试用例详解
- Excel导入导出组件的设计
- 【文件处理】——Python pandas 写入数据到excel中
- 最近很火的在线文件预览txt、doc、ppt、pdf、excel、jpg、png、zip、tar.gz等各种文件及压缩文件在线解压和预览,包括前后端设计和源码,编写搜索引擎多关键词检索名称和内容(五)
- ivew-admin 导入excel
- 电商 Excel 列 连接,类似SQL里面的 join
- C# 清单模板导入 根据Excel生成树
- java导入导出excel
- [Excel知识技能] 排序功能