一个计算机爱好者的不完整回忆(五十)终极之作2

来源:互联网 发布:java自定义表单引擎 编辑:程序博客网 时间:2024/05/17 03:04
  上篇博客中我说了,我那套通知单管理系统很完美,虽然有点狂妄的意味,不过确实做得比较好。但是我并不满足,我要做的不只是这些,我要做的是一个能够支持各种文档的系统。通知单管理系统想做到完美或者说接近完美的程度不算难,觉得哪里可以改进,只需要改代码就可以了,反正这类软件技术难度不大,只要大家使用过程中发现哪里可以改进我都能做到,有时候甚至为了能够少按一次鼠标、少移动一点鼠标距离而做出细微处的调整,真的算是做到尽量极致了。但是怎么才能把通知单管理系统扩展成支持各种文档?这是一个很困难的问题。
  通知单管理系统做完很长时间我都在思考如何做一个能像通知单管理系统一样方便,可以支持各种文档的系统。我可以接受这个通用的文档管理系统不追求完全极致的操作(通用的东西总还是很难针对每一个特有项目的细节进行优化的,至少不会优化到鼠标距离移动尽量少),但基本原则不能变,所有的数据都只能录入一次,操作要基本上一致,能够有很强的扩展性。就是这几个问题,我就想了好久。
  其实最核心的问题就在于,如果支持各种各样的文档,所有的文档都要能够自动填写,自动入库。我们工作中有几十种文档,有word的,有excel的,还有非常大一部分是AutoCAD的,剩下的还有一些pdf和图片格式的文档可能也许要入库保存。总之,既然要做一个文档管理系统,那么就得像点样,用户不再需要自己到电脑的文件夹中去找文档,所有的文档操作、打开都可以从我这个系统中完成才行。工作中也调查并参观过其他单位所用的文档管理系统,比我们厂那个winchill要好一些,但也强不了多少,感觉系统不错的都是领导们,每天拿鼠标点两下就可以看到文档的内容,感觉很先进,实际上真正干活的技术人员都是叫苦不迭的,为了领导那几下鼠标,他们每个人都要额外付出很多工作。如果做出让真正干活使用这套系统的人觉得好用才是一个好的管理系统,至少,不应该额外增加工作量才行,如果能做到像我那个通知单管理系统不但完成了管理功能还能节省具体工作人员的工作量那就完美了。
  当我把所有的问题都想得差不多的时候,在08年9月,我开始开发这套系统。用了三个月时间,完成了基本功能,算是达到了既简化用户操作又完成管理功能的目标。当时的版本号是0.5。
  此时解决的最主要问题就是如何操作,是的,没错,是用户如何完成发一个文档的操作流程。其它的所有技术问题都不如这个问题重要,作为一个真正干活的人,我开发不是从具体功能入手,我是从用户使用角度来入手的,这也是我一直说我这个软件比市面上所有的同类软件更方便更贴近我们工作的原因,即便软件开发者进行需求分析,又怎么可能比得上工作将近10年的人更了解如何操作才更方便呢。
  解决另一个问题就是如何统一各种文档的录入、查询、生成。每种文档所支持的字段都不一样,所使用的软件都不一样。在我们工厂用的最多的就是word文档,然后是autocad文件,然后是excel文档,其他文档我们都不生成,仅仅录入备查即可。我的软件必须能够适应各种文档,能够自动根据选择文档的不同来自动生成不同的录入、查询界面来进行相应的操作。我是通过xml文档来描述各种文档类型的,实际上主程序类似一个解释器,根据用户选择的文档来提取描述该文档的xml文件,然后根据这个文件生成相应字段。说起来似乎还很容易,但做起来的时候还是颇费了一翻功夫。还使用了类似于插件的方式来支持其他文档,我的程序内部支持word、excel的自动生成等操作,其余的文档都是通过专门的dll文件来支持的,比如autocad,如果有需求需要支持图片啊、pdf等,只需要专门开发一个dll插件即可,扩展性比较强。
  
  从0.5版本开始,一方面继续完善软件功能,另一方面开始将程序分割,能够独立出来的功能都做成dll,至于这么做是不是很有必要,其实也没想那么多,当时主要是为以后扩展功能时调用一些现有功能能够更方便一点。
  到2009年2月份,基本上我这个软件就已经成型了。文档管理功能已经基本齐备,于是开始从文档管理系统向办公平台扩展。从这个软件一开始做的时候我就提供了一些通用的接口,比如用户验证、数据库的操作等等。这个在我以前做的信息平台中就已经体会到了这种方式的好处,用户只需要登陆我了的信息平台,我开发的所有其它独立软件都可以通过这个信息平台获取当前用户的信息,不用再次登录,跟QQ登录后腾讯的一些软件和网站都不需要再次登录是一样的,我的其他独立软件还要通过信息平台来完成数据库等操作,感觉上其实跟现在新浪、腾讯的那种开放平台的思想差不多,只不过我的水平有限,而且完全是自己在使用中自己摸索着瞎搞的,所以技术上那就差得太远了,但总体思想还是一样的,呵呵。也很多时候只是因为学到了C#具有某个功能,然后刻意用这个功能来实现,比如我实现所有的本地程序访问数据库的方式都是通过.net Remoting远程数据对象来做的,在用户登录我这个办公平台后,主程序会创建一个.net Remoting服务器,由来实现数据库的访问,然后所有属于我这个平台范畴内的应用程序都是作为客户端通过连接这服务器来实现对数据的访问的。另外也有一些是因为功能的需要我去专门学了一下相关知识的,比如反射的应用。