您的位置:程序门 -> delphi -> 非技术区



delphi多层架构设想,说的都有分


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


delphi多层架构设想,说的都有分[已结贴,结贴人:delphidj]
发表于:2007-05-21 10:40:24 楼主
1.在delphi多层方案里midas在数据处理上(将数据打包发送中间层)确实很方便,而且高效。可是我感觉midas的本身结构就将中间层的数据和逻辑耦合到了一起,在大项目的维护上很不好并且也不符合oo的思想。
    我也使用过c#来设计多层系统,基本上思想是这样:客户端(传递类实例)-〉webservice-> 逻辑层-〉数据持久层-〉数据库。在客户端只涉及表现层的东西,对于数据的逻辑都放在逻辑层,并且使用持久层进行数据的维护,我觉得这样的架构维护方便,在客户端很多的时候部署也很方便(逻辑层的修改只需修改服务器端)。
      在c#\java上持久层的资料以及代码生成器真是应有尽有,可我现在奇怪的是delphi在这方面却是空白(我所了解的很多公司都不是采用的上述方法),网上关于
delphi   o/r方面的资料也是了了可数,确实使用了o/r映射会使开发的工作量要大些,可对于一个大型的软件而言软件的可维护性和健壮性才是最主要的。为何有这种现象呢?我本想使用delphi来设计一套持久层,在此之前我想先听听大家的意见和见解
2.如果采用多层的设计方案,那末客户端和逻辑层的连接是否就只能通过webservice来实现,是否还有其他的方案?
发表于:2007-05-21 13:13:321楼 得分:10
1
关注一下
发表于:2007-05-21 13:16:462楼 得分:10
2
发表于:2007-05-21 16:57:443楼 得分:0
d区有点冷
发表于:2007-05-21 23:27:294楼 得分:0
关注
发表于:2007-05-22 02:12:275楼 得分:10
采用持久层如果用户数量太大,会占用大量的资源,造成系统性能下降。我觉得还是要看怎样做开发效率高,不一定逻辑处理全部放在中间层的,况且现在网络那么发达,在线自动升级本地文件是很简单的事情。
发表于:2007-05-22 08:33:316楼 得分:0
没做过这方面的设计.关注一下.
发表于:2007-05-22 08:41:477楼 得分:0
该回复于2007-12-29 16:17:36被管理员或版主删除
发表于:2007-05-22 09:18:448楼 得分:0
我觉得delphi也是非常郁闷的,很大的一个特点就是你没法将逻辑层和数据持久层进行分离,要么就是分离了写起来特别难受,代码自动化也不好弄。还是遵循这种思想吧:先做好系统架构架构方面的。过于设计也是不提倡的。
我以前用c#,现在用delphi,刚开始郁闷架构,现在郁闷它的tdbgrid。
发表于:2007-05-22 09:19:399楼 得分:0
说错了,是
先做好系统再考虑架构架构方面的优化
发表于:2007-05-22 09:20:2410楼 得分:0
operfume(橘子香水):采用持久层效率是比使用原生的ado数据维护效率差一些
                                    1.   可这样做的最大的目的是降低逻辑层和数据层的耦合,这对于一个大的项目的维护是很重要的。
                                    2.减少频繁的对客户端的更新
发表于:2007-05-22 09:26:3711楼 得分:0
呵呵,设计系统最重要的就是前期的架构,如果系统都设计好了再优化框架,那不相当于设计好系统后再补《设计方案》吗
发表于:2007-05-22 09:57:2212楼 得分:0
其实delphi的多层架构分得不是很明显,做了三年多delphi了,对多层至今没有一个明显的认识
发表于:2007-05-22 10:04:4113楼 得分:10
可能是我不了解c#,所以看楼主的问题有点不懂。
1.用midas,客户端完全可以只使用数据而不捆绑逻辑,逻辑可以在服务端实现。
    不知道楼主为啥认为midas一定是数据跟逻辑不能分?
2.您可以试一下intraweb,它实现b/s结构,相当吸引人的工具。
    不过不知道能否支持楼主的大系统要求了。


另外想问一下:lz想设计的持久层是为了达到什么目标?
因为delphi里都有持久层的工具:ado那些。
发表于:2007-05-22 11:41:3714楼 得分:0
hawk_e2e(hawk_e2e):1.midas的客户端确实只使用数据而不捆绑逻辑,而我问你:在你的中间层里你能很好的做到数据跟逻辑的分离吗
2.intraweb确实是个很方便的建网站的途径
3.持久层:无非执行的是数据存取操作,之所以要使用持久层就是我们要在多层结构的系统中对数据进行存取。ado、bde...从某种意义上他们是实现的持久层的功能,可对于系统中的持久层来说他们都只是持久层的一部分或者说是一个工具。
发表于:2007-05-22 13:41:1215楼 得分:10
可能是我没做过大型的系统吧,所以只能讨论一下。感觉上delphi不适合开发大型系统,
所指的大型就好像一个城市的社会保障系统这样的规模,因为缺乏运行环境的支持,譬如:内存回收机制等。
1.如果你指的是spring里展现数据跟业务对象的自动映射机制,delphi里确实没有,需要你开发来支持。不过,有没有必要完全像spring那样分离就视乎情况而定了。
2.intraweb可以用来建网站,而且很方便,不过它主要是为了web应用而设计的。
3.如果你想开发像hibernate那样的持久层机制,可以。不过,有多少delphi开发的系统需要一个持久层来管理数据存取呢?

发表于:2007-05-22 13:52:0516楼 得分:0
“感觉上delphi不适合开发大型系统“
我很不同意这个观点,hawk_e2e(hawk_e2e)   可以去了解下现在软件业(erp等)的绝大多数winform系统是使用那种语言。
在winform上我依然认为:‘delphi是winform的王者'
发表于:2007-05-22 16:11:5617楼 得分:0
加入   delphi   群   14507689   ,里面有高手
发表于:2007-05-22 16:50:4918楼 得分:30
数据持久层,没有特别的必要,会增加系统复杂性,这是我的经验。

我做过这方面的东西,对于经常变化的需求而言,实体对象不大可能是稳定的,是经常变化的,一般来说,需求发生变化都会影响实体对象。增加数据持久层减少数据库和业务逻辑的耦合并不现实,除非你的数据库是变化的。数据库本身依赖于持久层自动生成的,绝大多数的应用不会是这样的。

如果,持久层仅仅是数据库表的对应,那基本没意义。唯一有意义的地方可能在密集查询时有好处。

此外,过多的层次会增加无意义的框架代码。比如,你使用事件,但是又不想暴露底层对象,那么一层一层的事件调用很累人的。还有一些属性,你想要传送数据,又不想传送底层对象,那么对象仅仅可能是类型转换就要耗费很大一部分精力,而实际上没什么意义。

层次多并不好,除非有特别的用途,否则,三层结构是很不错的。
发表于:2007-05-22 16:54:4019楼 得分:0
简言之,增加层次并不会减少维护量和增加扩展性。

仅仅是好看了一些。当然在一个很多人合作的大项目中,增加层次有助于项目管理。
发表于:2007-05-22 17:41:2020楼 得分:0
还真没做过这个,留个足迹,期待前人讲座
发表于:2007-05-22 20:33:3321楼 得分:0
楼主好像老是想用delphi做大型系统似的。哈哈。
就算是一个集团的erp又能有多复杂?怎能跟一个城市的社保系统的规模相比。
我也只是打了个类比。

个人认为在一个大型的系统里,对运行环境的必要支持是很重要的,如:避免内存泄漏,避免引用非法指针,对关键资源的保护(即安全性)等,否则在设计上和测试上要花很多功夫,而且稳定性还不一定能保证。
发表于:2007-05-23 11:30:0022楼 得分:0
看来我们都跑题了,
言归正传:
          如果使用语言delphi,在一个winform系统上,有设计持久层的必要吗??原因

我现在的意见是:需要,1.这对于系统的后期维护有好处,逻辑清晰
                                            2.使得系统再日后再挂web版等的系统很方便(只需设计表现层)
发表于:2007-05-23 11:52:3223楼 得分:0
没什么好处,如要挂web版会有好处。

如果作为一个框架产品,具有一定的通用性,那么需要持久层,如果是单一产品没什么好处。只会增加复杂性。

持久层隔离数据库特性的意义不大,很多数据库驱动已经有这些作用了。

逻辑清晰不一定会减少维护的工作量,增加一个层就意味着需要定义上下接口,多一个接口使用约定,加上其它的数据结构转换造成的工作量,开销不小的。

此外,相对具象的持久层需要表达对象之间复杂的互动关系时候尤其困难,数据表之间的关系单纯、全面而且有统一的处理方法。用对象之间的引用来表达数据表中记录的键关系,吃力不讨好的事情。

如果,减少对象间关系的表达,仅作为数据表的对应物,那还是可以接受的,但是这样的对象已经有现成的东西了,并不需要做。
发表于:2007-05-23 11:58:4624楼 得分:0
java中的很多东西并不是很好的,要考虑到java的应用环境,他应用的底层平台千变万化,管理员远远多于程序员。所以用它做的东西必须要有高度的抽象性,能够通过管理方式而不是编程的办法来解决平台差异问题。实际上这么做是方便了管理人员,增加了程序的复杂性。

java中有很多的东西没有标准化,没有事实上的惯用准则,也造成这种状况。

mvc很受推崇,实际上mvc是很低效的。虽然我们惯用的事件模型倍受指责,但是他的确简便灵活。
发表于:2007-05-23 17:33:3825楼 得分:0
进来窥一下就走!
发表于:2007-05-25 16:27:0026楼 得分:0
> 所指的大型就好像一个城市的社会保障系统这样的规模,因为缺乏运行环境的支持,譬如:内存回收机制等。

delphi在社保系统中的成功案例多着呢。一个城市的算什么哦,以前我们的省社保都是用delphi完成的。
发表于:2007-05-25 16:28:3827楼 得分:0
java   为什么会有那么多设计模式,就是因为java开发不方便,如果不采用模型固定的方法,开发出来的东西效率非常底下。

所有才引入了很多的模式来解决效率的问题。
发表于:2007-05-28 14:00:4328楼 得分:0
关注中
发表于:2007-05-29 09:20:1529楼 得分:0
学习中......
发表于:2007-05-29 11:35:2730楼 得分:0
学习
发表于:2007-05-29 22:33:4331楼 得分:0
见到牛人拉
发表于:2007-05-30 09:28:2032楼 得分:0
从bluetrees(蜗牛)   的发言看,说出这么多问题,是属于还没有掌握设计的缘故,而不是分层本身的问题。
发表于:2007-05-30 15:15:3533楼 得分:0
愿闻其详。
发表于:2007-05-30 21:46:4834楼 得分:20
多层系统开发最重要的是选择好中间层,好与不好千差万别哟。
如果要delphi来开发,可以用一个国人自己开发的中间件(www.quickburro.com):

quickburro系统较准确地抓住了分布式应用开发的核心问题,不仅分布式开发的“数据库-中间件-瘦客户端”这种三层模型设计思想得到了很好的贯彻,同时进一步向程序员提供了实现横跨internet广泛区域内的软件开发共性部分:组网、命名、寻址、连接维持、远程数据交换、数据压缩传输、加密传输、通信并发性能改善、同步事件等等,并以“基础协议—通信软件—api接口”机制进行技术实现。系统主要功能特色如下:

          在internet上架构大型树状级联网

          升级动态ip的internet节点成为树状级联网节点

          升级企业内网节点成为树状级联网用户

          独特的节点代码和用户代码命名规则

          支持对级联网中任意节点的快速寻址,并对应用程序透明

          上下层节点间自动维持连接,断开后自动重建连接

          智能分担根节点压力,有效利用固定ip节点的资源

          udp技术与socket技术结合,并发性能及响应速度优异

          采用小容量信息加密、大容量信息压缩机制,传输速度快

          支持对任意节点内网数据库的读写,并对应用程序透明

          支持内网用户间、外网节点间、用户与节点间的各种数据通信

          支持信息群发,一句代码完成向成千上万的各地用户发布信息

          支持业务逻辑插件的本地挂接和远程自动挂接及远程调用

          支持自定义格式数据的传输,具备无限的业务扩展能力

          监控功能丰富、系统稳定可靠、可无人值守运行

          提供应用编程控件,应用程序接口(api)极佳

          本系统与三层结构中的corrba、.net、com/dcom等技术在实现的效果上有些类似,但编写应用程序的过程则区别较大。后者并不支持专用网的组建、分层的命名/动态ip寻址、udp形式的连接维持等,因而在广域网上组件专用级联网并编写应用程序时,仍然需要程序员额外编写大量代码,技术难度仍然较大/较多;而使用本系统,这些问题都不再需要考虑,程序员的主要精力将更多地投放到应用逻辑的实现上,因此负担更轻。
发表于:2007-06-05 16:03:5435楼 得分:0
楼上的真变恋
发表于:2007-06-05 16:04:1136楼 得分:0
简直是没脑子
发表于:2007-06-05 16:53:1037楼 得分:0
完全同意:onemonth(csdn真烦)  
从bluetrees(蜗牛)   的发言看,说出这么多问题,是属于还没有掌握设计的缘故,而不是分层本身的问题。
发表于:2007-06-05 16:54:2138楼 得分:0
java   为什么会有那么多设计模式,就是因为java开发不方便,如果不采用模型固定的方法,开发出来的东西效率非常底下。

所有才引入了很多的模式来解决效率的问题。
============================================
老兄你太搞笑了,知道什么是无知者无畏吗?
发表于:2007-06-05 18:31:4939楼 得分:0
用delphi做三层应用,可以超出局域网吗?服务端要放到一个公用ip上吗?
发表于:2007-06-05 19:36:3840楼 得分:0
java   为什么会有那么多设计模式,就是因为java开发不方便,如果不采用模型固定的方法,开发出来的东西效率非常底下。

所有才引入了很多的模式来解决效率的问题。
--------------
也算是其中一个说法
发表于:2007-06-08 15:05:2941楼 得分:0
我不知道,但是我说了。楼主你拍拍良心看这办吧
发表于:2007-06-14 15:43:1542楼 得分:0
好多人作的都是“假三层”!
发表于:2007-06-15 08:59:4343楼 得分:0
对多层至今没有一个明显的认识,见到牛人拉,关注中.....
发表于:2007-06-15 12:53:1244楼 得分:0
一般三次就够,层次分得多了,工作量无形也增加很多;够用就好,否则增加无畏的工作;
具体怎么用,感觉还是看系统的应用范围而定
发表于:2007-06-16 11:42:3845楼 得分:0
用socket,ado,tcp等来编写啦
实现远程连接的c/s,b/s混合架构
发表于:2007-06-16 12:17:4946楼 得分:0
用soap   也不错得
发表于:2007-06-18 09:02:0447楼 得分:0
也想用delphi做三层,基于corba的。
希望牛人过来讲讲。。
另外visibroker在那里下载大家知道吗》
发表于:2007-06-18 10:09:3348楼 得分:0
路过,   看牛人
发表于:2007-06-18 10:25:2049楼 得分:0
我发现一个问题,三层不支持api级的二次开发有点郁闷,因为客户有这个需求......
发表于:2007-06-18 10:28:0150楼 得分:0
比如说:客户可能要对销售数据自己分析,作复杂的数据运算,而一般的三层客户端是不开放这个接口的
发表于:2007-06-18 13:41:1451楼 得分:0
多一层就是多一层麻烦

观注下一代技术wpf
发表于:2007-06-18 13:47:3652楼 得分:0
sql   server   2008提供了直接的数据持久层,在语法上数据表直接表现为class,记录行表现为class的实例。加上嵌入语言中的linq,和编程语言结合的很平滑,查询得到的数据集具有集合特征,操纵起来很方便,linq很不错,组合语法延迟执行,只有在真正用到数据集数据的时候才真正翻译为sql查询执行实际的查询操作,而在语言外观上根本觉察不到。
发表于:2007-06-18 13:51:5853楼 得分:0
实体之间的复杂关系,查询时如何表达一直是个难题(我自己的感受),但是有了linq,这些都不再是问题了。

如果直接使用sql查询,破坏了中间层漂亮的外观,不允许直接使用sql又缺乏足够的灵活性。

现在问题都得到了解决。完美的中间层一致的解决办法,我真的好想大笑啊,实在太棒了,就是性能差了一点,其他应该很棒了。
发表于:2007-06-18 14:00:2554楼 得分:0
在delphi重要实现这些,难度太大了,我以前设想用纯集合操作(差并交迪卡尔积)来组合查询,数据集对象用集合操作互相组合,实际上,数据集对象并不包含真正的查询数据,在最终使用时,组合得到的最终数据集对象把这些操作关系翻译成sql查询,得到包含实际数据的数据集对象。

可惜,从没时间来实现这些东西。为生计奔忙啊。其实应该很容易,我太懒了,现在再也不用去想了,人家比我的想法更优秀更成熟。

平时在用数据集对象的时候,使用filter,效率的确太低了。而中间层又不可能老是变来变去。客户端filter好像不能避免似的。
发表于:2007-06-18 19:47:5955楼 得分:0
好贴!
up


快速检索

最新资讯
热门点击