如何开发一款报表引擎(二)技术节点分析

有兴趣的朋友可以先看上一篇文章,看完之后再看这篇文章会更加熟悉一些;上一篇梳理了整个的框架搭建,当然了都说不上专业,这些文章一方面是给自己看的,另外一方面如果你觉得有用那能帮到你那当然就更好了;

解决思路

框架梳理好了,说明这事情有个大体思路了,接下来就是慢慢踩坑了,因为我们知道,一个新产品开发出来,熟悉的部分是可控的,不熟悉的部分是不可控的,但是通常情况下不可控是一定存在的,不然我们也没必要在继续开发,直接拿来用就好了;

对于可控的东西我们自不必说,基本都是胸有成竹,没啥说的,主要的就是一些不可控因素,我们需要特别留意,因为这个直接关系到项目能不能按时交付,有没有可能开发出来;其实不管是对于开发人员本身还是管理层还是老板,基本都知道一个东西想要搞出来都不是那么容易的事情,唯一能做的就是尽可能的规避风险,这就像芒格老爷子说的:如果我知道一些路有问题,那我就不走这条路了;

比如在我要开发的这款报表引擎中,我需要面临的一些不可控因素主要来自两方面;

  1. 技术点的不可控,有些技术我并不熟悉,比如混合开发我基本没做过,h5我也没做过,echats我也没有用过,src数据库的架构我也不清楚;
  2. 开发事件的相对不可控,这个在开发中时常会有,比如我们公司我还需要参与代码维护,现场有了问题那我得顶上去,这会占用我的一些时间和精力;

实际上,第二个不可控因素比较好管理,这是一种通用的方法:1. 充分和上级沟通让,给他们尽可能地把一些不必要自己做的交给别人去做;2. 对于一些不必要的维护懂得说不;3. 预留一定的时间给代码维护,哪怕最终没有什么需要维护;

那么应对第一个不可控的方法,就是通过极简实现来完成,也就是说我先不大张旗鼓的搞,一定要搞得多么牛逼或者做的多么成熟多么漂亮,实际上在节点突破阶段强迫自己做得完美是我很不推荐的,那都是边边角角,是容易控制的东西嘛,显然在这个阶段不是工作的重点,又费时间;

节点梳理

先给技术节点排优先级,然后逐个突破;
节点突破有一个要领,首先对模块进行拆分,拆分到每一个模块我们都明确要干什么,要用什么技术去实现;其实我觉得做任何事情都是一样的原理,别人交代一个任务,或者自己给自己定一个任务,首先问清楚到底要什么,然后再搞明白这个东西里面的重点是什么,然后再思考我们要怎么做,最后才是开始行动,逐个突破达到目的,完成交付;

有很多人喜欢用计划赶不上变化来搪塞,我觉得这类人也没必要搞程序了,这类人最喜欢甩锅,通常什么事情都搞不好;

  1. 编写一个简单的混合开发应用
  2. 在安卓上使用echats生成简单报表
  3. 从数据库中读取数据使用echats生成报表到webview;
  4. 如何让Webview中显示多个图表,就像安卓的listview一样可以根据item个数显示图表个数并支持竖屏滚动;
  5. 抽取echats在安卓上使用的通用接口;
  6. 抽取用于生成echats接口的数据库查询接口;
  7. 编写简单的中间件整合echats指令和数据库查询指令;
  8. 未知,后面完善;

节点突破

做了节点梳理之后,我们就知道每个阶段需要做什么事情,由于我们把大模块拆分为我们能够理解的小模块之后,我们就能一个一个开始突破了,由于每一个节点都需要花费一定篇幅来讲,所以每一个节点的突破我都开一篇文章,我自己也在一个个突破中实践我的思路,一边写文章,一边做实现,完美;

首先制定阶段性计划
每个人的阶段性计划可能不太一样,要基于每个人自身情况考虑,但是有一点很明确,就是这个事情还是要做的,那么怎么做呢,我给出我自己的一些参考;

第一阶段: 尝试阶段

尝试阶段要解决的问题是攻破自身不了解的技术点,目标是实现一个最简单的原型(Demo);

Step1:列出陌生点:

  1. 不熟悉Echarts,不知道怎么用;(解决方法:试着使用修改官方的Demo);
  2. 不熟悉js脚本以及混合开发;(解决办法:试着开发一个最简单的混合应用,只要实现了混合目的即互相传参数并显示即可);
  3. 不知道怎么样从安卓java代码获取数据并动态加载到webView;(解决办法:参考网上示例写一个最简单的从安卓读取list数据并显示在WebView上的Demo,数据采用最简单的重复数据);

Step2:实现完整Demo

  1. 从数据库读取固定数据;
  2. 将数据封装并传入Webview显示;
  3. 适配不同数据到Webview,并排在一页上(可滚动,滑到相应位置在加载);

第二阶段: 架构阶段
Demo实现之后,对整体有了一定把握,不再觉得那么难了,这个时候需要考虑各个模块的架构设计,尽量使整个结构看起来互相独立又代码美观;

第三阶段: 编码阶段
做完整的实现,并尽可能的开发出优美的代码和高性能的应用;

这是一个通用报表引擎,构想完成的功能有: 1、提供给软件开发商一个报表开发中间件。针对c/s平台,用户可以以SDK的方式或Com的方式将其加入到自己的产品中。 针对b/s平台,该中间件通过在应用服务器端嵌入服务以处理WEB报表请求同时返回HTML页面。C/S架构中能够非常方便 的展示、打印、自动分页等功能,可以通过配置文件配置一张报表。支持复杂的财务报表。 2、可以作为一个通用的外挂式报表系统终端,可以在设计器中设计报表的取数规则,这些规则包括数据来源的数据库、数据 表以及相应的取数条件,这些规则会被报表底层解析成特定SQL语句并执行。最后将返回的数据直接按照配置的数据展示 逻辑展示在报表设计器中。 3、可以作为一般通用的表格应用系统被集成到应用软件中,以提供类似于Excel的部分基本表格功能。 以下为软件架构及开发现状的一点说明: 目前,报表底层大部分功能已经完成。Demo展示的报表设计器由于时间比较仓促部分底层已实现的基本功能还没能集成进去, 所以此Demo程序仅能展示部分功能。同时由于方便打包及展示,我特意将报表底层部件静态编译到了设计器中。这样演示的 时候作为一个“绿色软件”可以不基于其他支持库而运行。真正的报表底层包括以下几个Dll: 1、LTableLib.dll (提供表格的基本逻辑) 2、LGridLib.dll (提供数据表的一些增强功能) 3、LSheetLib.dll (提供类似于Excel中工作表的功能) 4、LGUILib.dll (提供表格绘制功能:为了兼容于非Windows系统(如Linux) ,特将系统相关的展现接口独立出来。可以非常方便的将本系统移植到非Windows系统中) 5、LGridBook.dll(封装类似于Excel中工作簿(Book)功能,本Dll为提供用户SDK开发的最终接口) 6、(可选)CLGridBook.dll(为了兼容其他支持Com标准的非c/c++开发工具(如:VB、VF、Delphi等),特意将底层封装 为一个标准Com组件,可以更加方便的提供支持) 最后,为了支持后续的功能扩展,系统设计成了一个开放性系统。新增的功能可以通过实现系统提供的各种插件接口进行任意扩展(如 Demo中插入图片的功能就是其中一个例子,另外艺术字及图表功能可以通过类似方式提供支持)。在可移植性方面,由于所有的底层代码 均采用标准C++编写,同时有效的将操作系统相关的技术进行了抽象(如展现GUI、事件、定时器、同步对象等)。在移植的时候只需要 重新实现几个简单的接口就可以了。 Demo中LRptDemo.etl文件是用设计器设计的一个报表样式,可以通过设计器将此文件打开展示。由于开发设计器的时间比较仓促,所以很多 菜单功能以及部分工具按钮功能还没有加进去(尽管这些功能以及被底层所支持)。 另:报表类似于Excel的公式及常用函数支持正在编写中,已实现的功能也不可避免的存在或多或少的BUG,见笑了 :) 如需要SDK/或COM开发包可以发邮件给我。呵呵:) E-Mail:zhiyong.luo@longshine.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯人院的院长大人

给点实际性的支持不?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值