讨论:win2000+sql2000开发中大型系统到底是用二层好还是多层好!(100分)

M

mrzj

Unregistered / Unconfirmed
GUEST, unregistred user!
我认为目前的技术来讲二层是优于多层的。目前的数据库技术已经比以前有了质的变化,ado的技术也已经到了2.8版了。我用delphi做过测试在p4平台,1.7Gcpu,40G硬盘,256兆内存下,在win和sql2000下可以在百分之一秒内完成下面几步:"连接上数据库,打开数据库,新增数据,查询若干行,关闭数据库,断开连接”。注:不是在百分之一秒完成一遍,而是近百遍。(使用ado操作sql2000),以上的例子说明完全可以在二层的开发环境中可以在要使用数据库的时候在连接数据库,在用数据库的时候就可以断开数据库,这种技术目前好象只能在微软的平台上实现。在连接数上来讲现在的多层也没有优势了。

在可扩展性方面二层也要优于三层,两层可以使用模块化开发,一个功能一个模块,一个模块一部分人来负责,不同的模块组合成一个大的系统,增减功能只是增减模块。如是三层就要在应用应用服务器层添加新方法,又要在客户层设计界面,非要一个整体的模块拆成两部分,就象人首异处一样。

在动态更新方面二层也要优于多层,如果一个正在工作中的应用服务器上的应用逻辑做了修改(增减的业务逻辑),一定要把应用服务器层给关掉,更换新版本后在重启应用服务器,在关掉的这段时间里所有的客户端都不能工作了(即使没有关联到增减业务逻辑的用户也要停止工作)。如果也增减了客户端界面的话还要来一遍二层技术的更改客户端界面。如果是二层的话就没用这个问题,因为所有业务应用都在客户端,我们可以使用微软的动态更新技术(如果有了新补定就在桌面的右下角就有个提示图标),我们做的只是发布新版本,更新动做由用户来决定。多层的就是因为有了应用服务器层其动态更新才不如二层方便。

开发效率上讲就不用举例了,二层肯定是要优于三层的。二层易于调试、开发的程序易读这些都是优点。

在分布式上现在的sql2000也是分布式数据库了,如果系统够大完全可以由多个独立的sql2000来构成一个大的逻辑上的sql2000。所以在分布式上多层也没有优势了。

三层的技术是从unix上起源的,三层在unix上非常不错的,它也一直在unix上发展,在unix上连接一次大型数据库也得好几秒吧,如果没有应用服务器一直连着数据库,而采用直连的话,连接一次就得几秒,这样的产品就没法用了。

先谈这么多,只想让大家讨论,我的意思就是现在一些书上讲三层怎么好,完全是在抄概念,可以说是张三李戴(Unix的三层帽子往win的头上戴!)
 
S

SmallGhost

Unregistered / Unconfirmed
GUEST, unregistred user!
我都是用二层开发系统的,多层太复杂了,我觉得不好!
我做了一个连锁POS系统25个门店也没有用多层,数据包都是自己的格式,发到门店解包
处理,这样更加安全!
 
R

renyi

Unregistered / Unconfirmed
GUEST, unregistred user!
要看面向的是什么样的应用。局域网还是广域网选择的标准不一样
 
M

mrzj

Unregistered / Unconfirmed
GUEST, unregistred user!
如果是局域网肯定用二层,如果是广域网使用b/s架构,客户-web服务器直连数据库。
 
R

rblong

Unregistered / Unconfirmed
GUEST, unregistred user!
关注!个人认为两层真的很方便!
 
L

liuchengr

Unregistered / Unconfirmed
GUEST, unregistred user!
下面两种结构,哪个是三层,哪个是二层,我对三层和二层概念不怎么清楚

1、数据库--|网络传输|--业务逻辑--表示层

2、数据库--业务逻辑--|网络传输|--表示层
 

要离

Unregistered / Unconfirmed
GUEST, unregistred user!
我曾经用二层开发过一个系统,有160(同时操作至少100)左右是客户端,效果还不错,但是在局域网内,所以我认为在局域网内如果用户数不超过200个是没很大的问题的,而且确实分模块开发比较方便,调式也方便,并且模块间的逻辑互不影响,如果联系到internet,三层还是有一定的优势吧
 
Z

zhbj

Unregistered / Unconfirmed
GUEST, unregistred user!
是的,三层更适合广域网【注意b/s也是三层的特例】,比如跨国集团或者大的集团系统
不适合用 b/s【集成业务逻辑确实不妥】,所以采用三层、多层

但对于局域网、中小企业,无论从效力,开发周期、易于维护等方面都是最理想的 ,
且借助 dbms的安全机制,原来的安全问题也有了质的进步 !

特别是近期,越来越感觉 三层 好像要被 .Net 和 J2EE 所代替
 
V

vb杀手

Unregistered / Unconfirmed
GUEST, unregistred user!
感觉不能笼统的说究竟是三层还是两层的好。因为任何东西都没有通杀的局面。正如每天都有人在吵到底那种语言好一样。任何语言都有自己的优势,vc++有vc++的优势,delphi也有delphi的长处,其实vb也不错嘛。看是用来做什么项目了。
同样道理到底三层好是是两层好同样是要看场合。并不是说三层就一定比两层好。要考虑很多方面的因素。两层实现起来比三层简单,简单就是一个很大程度上的优点,但是也不能说任何情况下都是两层比三层好。
比如说如果一个系统的用户总是在1000人以上,那么用了两层的结构,实现起来就非常吃力了。三层的出现可以出现解决很多问题,用户多的话,维护应该是三层比较方便的。但是对于现在很多的项目来说,的确是应用两层的场合比较多一点。
 
M

mrzj

Unregistered / Unconfirmed
GUEST, unregistred user!
to:vb杀手

我认为如果1000人以上同时并发请求的大系统,用多层实现才是非常困难的(用winnt+sql2000实现的多层技术),而用二层(我前面提到的采取动态链接技术)实现起来才是非常方便。

可以这么认为,并发数越多,二层的优势就越明显。例:现在的数据库完全包括原先多层用到的缓冲机制,比如打开表后,在关上表,这个表还是会在数据库的内存中存在一定时间的。我们软件的关表操作只是发送命令,具体什么时候物理关表(从数据库内存中把表清掉),这个由sql2000来决定。

我在这里要澄清书上讲的误区,书上总讲并发数多了多层的执行效率会高过二层,这纯粹是在误导读者,也可以说作者在信口开河,胡说八道,在winnt和sql2000下多层实现在95%以上情况下的执行效率都超不过二层。也就是讲普通开发人员不管在什么情况下开发的二层产品的执行效率都要好过三层。

这个论坛里已经有人做过测试了,用BDE,ado,采用二层与三层做的测试,我在这里看过,在这里肯定能找到的。
 
X

xeen

Unregistered / Unconfirmed
GUEST, unregistred user!
谁说三层执行效率高过二层了????
说这种话的书肯定是胡说八道,从理论分析上就不可能。
三层主要是封装逻辑和实现可伸缩性。
 
9

94132195

Unregistered / Unconfirmed
GUEST, unregistred user!
在中国虚荣心较重的人可能更多地选择三层,而更少是出于技术层面的思考
我觉得二层三层应该更好是放在软件的应用层面来分析,而不是作为一种编程水平高低的标准,
 
W

wr960204

Unregistered / Unconfirmed
GUEST, unregistred user!
三层的运行效率确实小于等于两层。
但是三层实现了业务逻辑和界面的分离,比较合理。
 
V

vitaminC

Unregistered / Unconfirmed
GUEST, unregistred user!
三层如何实现业务逻辑和界面的分离,解释的清楚些吧
 
W

wen00000000

Unregistered / Unconfirmed
GUEST, unregistred user!
具体开发具体应用,各有各的好吧。
 
顶部