三层架构开发中遇到的问题!请高手帮忙解答,谢谢!

arraiy 2008-03-26 05:38:06
大家好,目前正在把我们的产品从两层转到三层上,过程中遇到一些问题,向各位有经验的朋友求教:
先介绍一下我们的系统、改架构的原因,以及程序在三层中的架构思想:
系统:用于生产制造业的ERP,包括:业务、生产、需求计划、采购、品质、仓库、销售、成本、客户关系、人事考勤薪资等模块。数据库是SQL2000。
改架构的原因:主要是因为用户数量的原因,目前有客户用户数超过200了,用两层速度很慢。
三层中的架构思想:
1、客户端:实现所有用户对数据的新增、修改、删除、查询等简单操作。
2、中间层:用ADOConnection进行数据库连接,ADOQuery做数据集,TDataSetProvider做连接;用多个远程数据模块来放各个业务功能中的数据集,这样便于统一管理维护,因为数据表很多,500多个。在两层中这是一定要做的。
3、除简单数据添加删除操作之外,其它数据处理,如:转单,单据自动生成,数据分析,汇总查询等都在中间层实现,把所有业务逻辑放在中间层。

上面是大致思想,不知道这样对不对,请有经验的朋友指教一下。

因为首次接触三层,好多技术细节不明白,也没有经验,所以请大家多多指教。
另外,在实作过程中,参照了李维的《Delphi 5.x 分布式多层应用系统篇》一书,但还是遇到了一些问题,想向大家求教:
1、中间层中Type Library的使用还是不太清楚,上面那些快捷按扭各自新建相关的对象,具体怎么用呢
2、关于接口的说明也还是很糊涂。比如,在接口下面新建一个方法之后,这些代码在哪里去实现;
3、我看到别人的程序,在中间层除了数据模块之外,还有很多PAS文件,里面也有相关逻辑运算,客户端是怎么于这些单个的PAS文件中的方法联系起来的?
4、我想建多一些远程数据模块,把每个业务功能模块中要用的数据集放在各自的远程数据模块中,在客户端用SharedConnection来连接,这样统一管理维护。但是不知道怎么来实现,要怎么配置不清楚。
5、在建第一个远程数据模块的时候,系统自动生成了一个PAS文件,一个接口,可以在里面加入自己的方法,这个方法有参数,类型、返回值等,那些类型是针对于Windows的吧,和Pascall的不一样,这个我明白,因为中间层是一个COM组件,要想通用肯定类型也要和平台统一。但是如果我要返回自定义类型,可不可以呢?哪些自定义类型可以返回?
6、为了实现上面第4点中的想法,我又新建一个远程数据模块,想实现多个数据模块让客户端连接,可是我发现在DCOMCNFG中多出了我另外新建的这个数据模块的名字,这是为什么?一个EXE文件运行过后,在DCOMCNFG中出现了两个。我看到别人的程序里面有多个数据模块,但中间层运行过后在DCOMCNFG中只有一个组件服务器呀。

三层架构的书太少了,好多知识都没有讲到,网上搜也都只是做一个三层的简单的程序做示范,好多深入的内容都不提,但是在实作的时候就很棘手了。李维的书上有讲,但像这些细节也没提。所以在这里把问题散出来,希望大家帮帮我,谢谢!
...全文
140 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Corn1 2008-03-27
  • 打赏
  • 举报
回复
三层的话,数据可以压缩后传输,速度会快很多。我试过,1W多条数据,公网,不压缩大概需要15s左右,压缩后,6s。
当然,可以分页查询。
arraiy 2008-03-26
  • 打赏
  • 举报
回复
谢谢sz9214e ,谢谢你!

一直以来都是在做两层开发,三层没怎么接触。谢谢你,我再找找那些例子看看,以后有问题希望能向你求助!
sz9214e 2008-03-26
  • 打赏
  • 举报
回复
楼主的几个问题都不复杂,我就不一一回复了,有几点作为过来人可以提供一点经验分享:

李维的书做三层架构入门相当不错,但那本书离现在也有好多年了,且李维为了讲解方便,所实现的例子有其先天局限性,商业化软件一定不能照搬:

1. 不要一种服务或一张表对应一个接口,这样接口会无比复杂,在此事我吃过苦头,现我的ERP(规模比楼主的还要大),除了RDM内定接口AppServer外,只有一个接口,声明为:function OleVariant Execute(String ServiceName, OleVariant Param),这即可满足所有逻辑层对外提供服务的要求。涉及网络调用作业,有一点可牢记在心:越简单的越适用。

2. 在delphi 7目录下,有一个关于三层架构范例文件,位置为:Borland\Delphi7\Demos\Midas\Pooler,这个项目不复杂,但十分实用,建议你仔细阅读它,甚止可以以它为基础开发你的erp系统app层。

3. 若时间允许,可以考虑使用soap等更通用的架构,在性能与灵活性方面,将更好些。不过以楼主所提之问题,对于三层架构还不太熟悉,你也可以先使用delphi的midas架构,它容易入手,也便于你早日开展工作。

祝你成功!

hsmserver 2008-03-26
  • 打赏
  • 举报
回复
unsigned 说的有道理
不过要做三层的话
业务逻辑服务器处理
客户端尽量不要下载全部数据
我们现在用DBX感觉效果还可以
僵哥 2008-03-26
  • 打赏
  • 举报
回复
真想把三层做好,先需要对数据库有很深入的了解,特别是数据库当中的事务隔离级别,数据库索引等等。
arraiy 2008-03-26
  • 打赏
  • 举报
回复
谢谢各位。不过我还是比较相信李维的话,在超出200个客户端的情况下,分布式能发挥出它的优势!

上面遇到的几个问题,就是不转到三层,我也会非常希望得到解决,因为解决一个问题,心中迷惑就少一个,懂得的就多一个,自身能力也就提升一步。

希望有三层分布式开发经验的朋友,多帮帮我谢谢!
mantti 2008-03-26
  • 打赏
  • 举报
回复
要快好办,加服务器,升级配置,优化网速
僵哥 2008-03-26
  • 打赏
  • 举报
回复
效率不是两层转三层或多层的理由。多一层就多一层的复杂,多一层的消耗。

先对数据库进行优化,对数据结构按使用频率等进行调整。对select用到的字段元素进行规范,使用频率低,而数据量大的字段数据可以“应需传输(检索)”。
僵哥 2008-03-26
  • 打赏
  • 举报
回复
如果用两层都慢了,那三层会快吗?

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧