上午跑到技术部拷费收系统,跟小唐,小唐和小梁聊了一阵,主要是涉及到我们开发生产系统这个过程的问题,应该如何进行企业级开发,最后小唐(唐学武)给我演示了一下他们用的基于流程管理的OA系统。
他们觉得我们作系统有以下问题:
1、数据库设计的太随意,把收集上来的单据直接变成数据库表,然后界面是错误的做法。唐学武说做的简直就是打单系统(也就是报表系统)。
2、代码写的太滥,冗余重复的代码太多,应该使用OO。小梁一直在维护该系统,感触颇深,具体而言包括:
1)函数太长,用小梁的话说就是大家似乎就是为了能把程序作出来面向实现编出来的程序,一气下来,也不说把代码分解一下。我最近往地磅系统里面加入视频监控功能,结果遇到一个1111行的函数,真是崩溃。小梁说,我看到一个代码
2)到处重复。好多重复的代码,if else段中的代码超多重复的代码。
3)代码太随意。很多代码写的很有问题,好像是随便写的,权限控制的代码时间复杂度是n的6次方,访问了上千次数据库,而且还有大量重复的数据库读取操作,速度能不慢吗?代码随意也就罢了,也不重构,代码越来越恶心。
3、应该从业务出发,业务逻辑和数据库应该是分开的,数据库相对稳定,而业务逻辑可以变化。我的设想是,先从业务逻辑出发,看哪些需要持久化,在设计出数据库。他们认为搜集些单据,然后设计出数据库,容纳后设计界面的做法是错误的,应该从业务出发。
小梁认为生产系统存在大量的分支情况,就应该使用面向对象技术,我想他指的是利用多态。而唐学武则认为大处用面向对象,小处用面向过程,而小的地方可能只限于一个方法内,可以使用过程式的代码。
唐学武认为,调研时不应该仅仅按照部门来设计系统,而应该从全局角度出发(如果你够敏感,应该想到工作流中,我们是先有流程,然后来配置角色,和这个想法是一致的)。
小梁认为,业务系统应该和报表程序并行开发,数据库中存在的内容要够未来的统计系统使用。我得到的启示是,统计数据库和业务数据库设计的出发点是不同的。我在做OO设计时,考虑的是什么样的数据需要持久化,因为有些数据必须在新的会话中可以获得,在宕机重起之后还可以读取到内存中。而统计数据库的目的是需要基于这些内容进行统计分析。我想更多人将这两种诉求混为一谈了,什么都持久化到数据库中从业务角度来看是没必要的,而对于统计而言,很多数据确实是需要持久化到数据库的。对于数据库的认识我终于找到了我和黄老师,刘老师的分歧,我受到很大的老外那些J2EE,体系结构方面的书的影响,觉得数据库不过是个持久化机制,你也可以持久化到文件系统,XML中之类的,所以我过去很少对数据库特性进行研究。而黄老师那时候一句:在MIS中最大的软件其实是RDBMS。所以IBM的信息管理产品就是DB2。
后来唐学武给我看了他们用的基于流程的OA,觉得这就是传说中的随便画画就能搭建各种系统的东东,就是那类能改变人生观的平台。他这个还有缺陷,比如并发访问控制的不好(事务与并发,世界性难题,我们目前遇到的很大的问题就是这方面的设计,我一直也觉得这类平台的问题就在这块儿,他们能很好的解决简单问题,但是复杂问题解决得不好或解决不了)。不过他的这个体系结构还是很不错的,先设计一个单据,如果这个单据要经过四个步骤(就是jBPM中的节点),那么就在这个单据上设定每个内容应该由谁来填写,还可以设置这部分内容加载时会触发什么函数(可以用VB语言来写,我想是不是类似于Justup那个可以利用Delphi语言来写?),也就是jBPM中进入这个节点之前会调用Action做什么事情。用户可以自定义函数,它提供了现成的访问数据库的函数,代码很简单,和我过去编的访问数据库的通用函数一样。这样就可以自己定义函数访问数据库,存取数据,进行计算,展开业务逻辑了。说真的,这个完全可以搭建起这样的数据驱动的系统,而且它还可以扩展,我想刘老师所谓平台,大抵就是这个了!这个平台我们用jBPM完全可以实现,而且会实现的更好。
回去看集团信息中心编的费收系统,我竟然在黄老师给我的文档中找到了源程序(他还让我向小唐他们要源代码呢),阅读了一下,真的很惊叹,他们的体系结构设计的真的很不错,而且文档很专业,各种业务需求非常明确,还有PPT版,我想他们一定对每个需求都反复的审查过,专业啊,就是不一样。
首先他们做了分层,数据库逻辑写在了存储过程,函数,触发器中,然后为窗体建了一个DataModel,里面都是访问数据库的控件,这样就分离出了数据库访问逻辑。
他们建立几个BaseForm,一个最基本的Form中定义了所有窗体都会用到的虚方法,比如Save之类的,我感觉他们使用了Template Method模式,在子类中给出具体的数据库访问控件和SQL语句,比较经典的是下面这段:
Delphi代码
- procedure TBaseForm.Delete;
-
- begin
-
- if not QueryMsg('删除当前单据吗?') then Exit;
-
- with TOraQuery(dsMaster.DataSet) do
-
- begin
-
- try
-
- StartFeeTrans;
-
- Delete;
-
- ApplyUpdates;
-
- FeeCommit;
-
- except
-
- FeeRollback;
-
- end;
-
- end;
-
- end;
-
Save方法与此类似,然后在其他窗体里就可以继承这个窗体的方法,把dsMaster和具体的Query联系起来,然后就可以处理了,而且不用重复的写这些事务代码,很不错的写法。
他们对于数据加锁和解锁都有考虑到,可以说很专业。
不过关于业务层处理事务的共识,好像在这里并没有体现,这是我最近在研究的一个重点。
然后在Form中只需要写些读取数据的代码就可以了,他们充分的利用了ODAC的现成方法。他们在BaseForm中还使用了TActionList对象,很好的解决了控件状态的问题,不过我觉得Delphi在设计Action时不只是考虑这点,我在想它是否和Swing中的监听器是一个概念呢?如果是的话,那么我们可以编写出耦合度更小的Delphi。
可以说,看了费收系统的代码,让我对于Delphi企业级开发的理解又迈进了一大步,有空的时候我会好好整理一下思路,仔细研究一下他们的代码,真的很不错,而且经过我们的改进,一定会更好,因为在J2EE的研究中,我已经获得了很多经验。
从实践中学习,才会学的更深!我想昨天跟文文聊过,她应该会很赞同我的说法~~
分享到:
相关推荐
《计算流体力学-从实践中学习》这门课程旨在教授计算流体力学(CFD,Computational Fluid Dynamics)的基本概念和应用。计算流体力学是利用数值方法来模拟和预测流体流动现象的一门科学,它在航空、航天、汽车工程、...
这本书《从实践中学习Oracle SQL》显然是一本旨在帮助新手快速掌握Oracle SQL语法和实践操作的教材。书中很可能涵盖了以下关键知识点: 1. **Oracle数据库基础知识**:这部分可能会介绍Oracle数据库的基本概念,如...
从实践中学习Oracle数据库管理与维护
从实践中学习Oracle数据库管理与维护.part7.rar
我做了二十多年的软件开发,目前主要做自动化设备。...另外,书中的代码可能会有错误,我自己就发现了一些问题,有的类的函数没有在头文件定义,忘拷贝了。如果你发现有错误,请发邮件给我,谢谢。
压缩包PART1,与PART2共同解压。 ORACLE数据DBA入门与提高教程。包含Oracle数据库管理与维护内容。...一本Oracle数据库管理的入门教材,适合于初中级的读者,是作者二十多年IT工作和教学实践的总结与升华。
从实践中学习Oracle数据库管理与维护.part2
最后,教师需要将深度学习理念与实践活动课程相结合,提高实践课程的教学实效性,例如在“网络科技对学生生活影响”课程中,设计调查问卷并分析数据,使学生从实践中学习,提升分析问题和解决问题的能力。...
从实践中学习Oracle数据库管理与维护.part6.rar
大学霸 Kali Linux 网络扫描教程
Kali Linux无线网络渗透测试教程(大学霸) Kali Linux无线网络渗透测试教程(大学霸) Kali Linux无线网络渗透测试教程(大学霸)
wireShark 从入门到精通, 文档详细,包含各种网络抓包的 过滤方法等
这种从实践中学习、从学习中反思的过程,帮助学生建立起更加稳固的知识体系,同时也使他们成为更有价值的社会成员。 综合三篇心得体会,我们可以清晰地看到社会实践对中学生的多重意义。它不仅让学生在实践中学习...
最后,PPT会呈现活动的反思与总结,从而让学生从实践中学习到更多的东西,提高自身的认知水平和实践能力。 报告中的文档部分,则更注重于理论研究和案例分析的深入。在这一部分,学生将有机会深入研究环保的理论...
这些内容不仅帮助其他学生在未来的实践中避免类似的问题,也展示了学生们如何从实践中学习和成长。 成果展示部分则直观地呈现了实践所取得的成效。这些成效可以是具体的数据分析、研究成果、服务项目或者产品原型等...
初级使用说明,没有协议内容
4. **理论与实践的结合**:社会实践强调将所学知识应用到实际中,促进理论知识的深化理解和实际操作能力的提升,形成从实践中学习、再以学习指导实践的良性循环。 5. **服务社会的意识**:大学生应树立服务社会的...
这种从实践中学习的过程,使得理论知识更加生动具体,同时也让我们认识到了自身在专业知识和技能方面的不足,激发了我们进一步深入学习的动力。 此外,我们还学习到了先进的汽车管理理念和客户服务技巧。在实际工作...
总的来说,通过深入研究这个“ROS机器人编程实践教材配套程序代码”,你可以从实践中学习ROS,了解如何将理论知识应用于实际机器人系统,增强你的编程和问题解决能力。这将为你的机器人项目开发打下坚实的基础,并...
要学会从实践中学习,从学习中实践。我们不只要学好学校里所学到的知识,还要不断从生活中,实践中学其他知识,不断地从各方面武装自已,才能在竞争中突出自已,表现自已。 总结: 社会实践是大学生接触社会、了解...