怎么解决在构造三层体系时一个容易犯的毛病?欢迎各位进来一展高论!

jxspace 2003-02-10 01:59:33
在阅读<delphi开发人员指南>一书的midas章节的时候,作者写了这样段发人深省的话:
"在建立多层应用程序中,最常出现的失误是把关于数据库的不必要知识放在了表示层,如,从客户端向服务器发送动态sql命令,那么,客户应用程序必须总是与数据库保持同步。这种方式带来更多的不稳定成分,它需要在整个多层应用中被调整。如果改变了数据层上一个表的结构,必须更新所有发送动态sql的客户应用程序,这样才能发送正确的sql命令."

对这段论述本人深有同感.记得以前开发过一个项目,为bs架构,中间层是asp+com,当时为了实现一个动态查询操作,比如要查一张表中的纪录,用一个接口来实现,传入记录结果集以及纪录过滤条件,也就是在该接口函数中获得 where afield=xx and bfield=xx ...的动态sql语句,这样的结果是使得接口要传入的参数巨多,可读性差而且当该表需要更改结构比如添加一个字段的时候,就需要修改接口以满足对该字段的查询,而接口的改变必然要对客户端调用进行修改.这样一来,中间层的优势就大打折扣了.

看罢以上这段文字,不知各位意下如何?有什么方式可以解决这个问题,无论是Com或者在Midas中,怎么来实现比如动态查询功能,而又使我们的中间层非常有弹性?望赐教.
...全文
122 79 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
79 条回复
切换为时间正序
请发表友善的回复…
发表回复
lqdmafeng 2003-08-11
  • 打赏
  • 举报
回复
ddd
jxspace 2003-05-10
  • 打赏
  • 举报
回复
补一补,由于天色已晚,明日我来个结帖宣言,以感谢各位捧场,希望大伙也投票一下,看看哪些猛将兄应该好好犒赏,是人人高兴呢还是让小部分人先富起来,分不多,50,呵呵,最后再次感谢。
jxspace 2003-05-10
  • 打赏
  • 举报
回复
呵呵,看大伙那么热烈,看来我11号再结帐吧,感谢那么多位兄弟猛将兄捧场,尤其是李战兄力战群雄,什么时候认识一下,我在深圳待过一年多,现在在上海,李战兄或者是各位同仁,如果到上海的话在给我个信吧,一定好好盛情款待,并好好切磋技艺。
eastliangliang 2003-05-09
  • 打赏
  • 举报
回复
好么,楼主终于出来了:)
还有什么问题继续问啊,大家继续讨论,要么再开一帖:)
jxspace 2003-05-09
  • 打赏
  • 举报
回复
各位,好威猛,我在过年的时候发的个帖子,能这么一直讨论下去,佩服,我何时结贴?呵呵
石榴刺猬 2003-04-06
  • 打赏
  • 举报
回复
抛砖引玉,我给一个我正在做的类似于上面几位兄台提到的框架的一个数据字典,不是很成熟,因为才刚刚做第二个版本,我估计等我做第三个版本的时候就会好一些了。顺便多说几句,这种框架是软件复用的实用形式,对于一个领域内的开发效率有很大的提高。

“数据表”表结构
流水号
表名称
表描述


“字段表”表结构:

流水号
字段名
显示标签
字段类型
字段长度
是否关键字段
是否建立索引
可否为NULL
显示掩码
数据表流水号
是否可见
是否启用
是否LOOKUP //以下是与他表关系用的
LOOKUP表流水号
LOOKUP字段名
控件类型 //以下的信息是为配置编辑界面用的
控件左边界
控件右边界
控件高度
控件宽度
。。。
。。。
。。。


“表关系”表结构
流水号
主表流水号
关系类型 //用字段还是用索引
主表字段名 //字段名和索引名只用其一
主表索引名
从表流水号
从表字段名
从表索引名

“系统查询表”表结构
流水号
表流水号//或模块流水号
查询名称
查询条件表达式


以上是其中一部分,扔个砖头,希望能被玉砸到。
请李战兄、苹果兄以及其他各位有经验的同志提点意见。
manprogram 2003-04-06
  • 打赏
  • 举报
回复
很有启发,谢谢各位!
manprogram 2003-04-04
  • 打赏
  • 举报
回复
还有:李站兄能不能把数据字典的表结构告诉我们呀???谢谢。
manprogram 2003-04-04
  • 打赏
  • 举报
回复
对于把业务逻辑放到中间层我一直不太明白,假如表结构始终不变的话,是可以的。如果表结构变了,前台应用程序的界面一定也要变,这样即使有中间层了,你的业务逻辑变了,前台程序也要变的!!!那么中间层好到哪呢?

还有一个疑问,把业务逻辑放到中间层与写存储过程有什么区别吗???写存储过程也不是一样的吗?

你们一直在讨论查询,其实一个完整的应用程序,查询比例不是特别的大,还有一些其它的操作,也可以用数据字典实现吗?是否根据数据字典生成表结构呢?

请上面的高手讨论我提出的问题,我想这也是大家的疑惑!谢谢各位。
eastliangliang 2003-04-04
  • 打赏
  • 举报
回复
“表结构变了,前台应用程序的界面一定也要变”,不一定吧,有时候先期定义的数据库的表结构不是十分理想,想改的合理些,东西还是那些东西,对象还是那些对象,只要业务对象不变,前台可以不变。
中间层的好处是在库结构不变的情况下如果业务逻辑变了,改动小些,相对集中些。
举个例子,身份证号码升位了,原来的判断规则不对啦,改一改中间层的相对规则即可。
中间层和存储过程区别的问题。他们都可以完成封装业务逻辑的功能,只是存储过程依赖数据库。不过话又说回来,中间层还依赖操作系统呢,总之,用什么完全根据实际需要。
关于数据字典,李站兄给我很大启发,可是我水平有限,体会不深,不敢多说:)
李站兄好久没见了,不知常来否?盼见
tata1 2003-04-03
  • 打赏
  • 举报
回复
我认为客户端生成查询SQL是非常不好的做法,在对于客户端程序应该尽量以一个使用用户的角度去看待数据,而不应该过多的知道表结构信息。最好查询的方式应该是把查询参数以XML文档结构进行提交,在中间层进行解析并生成SQL。这样不仅容易维护,而且提高了系统的扩展性。
akoan 2003-04-03
  • 打赏
  • 举报
回复
gz
inshua 2003-04-03
  • 打赏
  • 举报
回复
我认为应该放弃 SQL,让我们发明一种新的查询吧,丫效率太低了,而且磕磕巴巴的,难用的很。
frisky 2003-04-03
  • 打赏
  • 举报
回复
帮忙看一下这个

http://expert.csdn.net/Expert/topic/1614/1615000.xml?temp=.3615229
frisky 2003-04-03
  • 打赏
  • 举报
回复
gz
hdm2001 2003-04-02
  • 打赏
  • 举报
回复
关注中…………
hait 2003-03-14
  • 打赏
  • 举报
回复
关注
Miracle 2003-03-11
  • 打赏
  • 举报
回复
“抽象都很高”应为“抽象度很高”
Miracle 2003-03-11
  • 打赏
  • 举报
回复
to nawala(魂魂) :

第一个问题,习惯上我们会在数据库中做一个或者几个表,用来说明其他用户表及其字段结构的含义和作用。这些说明性的表被称为数据字典。数据字典本身不直接参与业务执行,但对于理解业务和执行业务有着重要的辅助作用。但实际上数据字典不仅限于数据库表这一种形式,也可以是一个独立配置文件(如ini、XML文件),或者电子卡等其他的媒介。

你所提的第二个问题的答案是可行。与之相应的,你要开发针对此表(一个数据字典)进行解释的模块。

第三个问题,我这里没有比较容易懂的例子(我做的系统比较复杂,抽象都很高,不容易看明白),不过李战老兄一定有适合入门了解的例子,还是他来吧:)
fangzhouyu 2003-03-10
  • 打赏
  • 举报
回复
up
加载更多回复(59)

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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