如果用TAdoQuery和数据感应控件,诸如增加删除等操作只需用如AdoQuery.FieldByName('name').asstring的方式访问数据,而不必管界面上的显示元件如何摆放,但这些数据感应控件始终要设置相应的属性,当数据库变化时,这些属性也同样要做调整,所以我始终认为这不算数据与界面的分离。
  如果用TAdoQuery和非数据感应控件如TEdit,Commbox等作为显示控件就更做不到数据与界面的分离,比如要访问一个字段,必须用AdoQuery.FieldByName('name').asstring:=edit1.Text,必须在Edit框中取值,这样数据与界面联系就更紧了,怎么也算不上数据与界面的分离。
  各位大侠,数据与界面的分离到底是怎么回事,小弟已经困惑很就了,还望各位指点迷津

解决方案 »

  1.   

    不要去追求理想化的数据与界面分离,它是个相对的概念。
    数据与界面分离要付出一定代价,你要综合考虑代价与取得的收益。且不说使用MIDAS技术,或者其它组件技术,或者XML+XSL实现方式就拿最简单的象下面这样来说,已经可以做相当的分离工作。
    AdoQuery.FieldByName('name').asstring:=edit1.Text这样的代码,可以分在两个单元,假设一个是frmMain, 一个是DM,
    1,现在作这样一些硬性限制,除了使用DATASOURCE方式作为数据的通道,两个单元只
    允许函数或属性访问另单元内的组件。比如在数据模块不允许象frmMain.edit1.text这样访问。
    2,AdoQuery.FieldByName('name').asstring这样的语句,使用一下符号常量方式。。const FIELD_XXX:string= 'name'; //这个字段名的定义,单独放入一个单元。//减少了对字段名的耦合.DM.XXXXX(aValue:string......)//EDIT1.TXT的值由参数传入,减少了对特定控件的耦合.
    begin
    ..
      AdoQuery.FieldByName(FIELD_XXX).Value:=...;//这样减少了对字段类型的耦合...
    ..
    end;以上只是示例,只是从小的地方提了一下,
    在实践某些概念之间,有些东西是有相当困难的,
    关键之处你是要去主动体会数据与界面分离带来的好处,
    你才会有真正的动力..