Delphi 中三层的概念已出来好久了。
Delphi 3.0 时就用了吧。
但真正在实际中用的人比较少
也有大多用是用了三层。不过也只是用两层的思想或者用文件型数据库的思想来做三层的。三层的基本思想就是分层。而那些所有在客户端向 AppServer 发 SQL 命令的全是“伪三层”所以本人真心寻师,不吝千金,只求良师指点迷津

解决方案 »

  1.   

    我了解的一般是底层将要改的数据存到XML中,然后由中间层解析XML统一提交到数据库。
      

  2.   

    你把这100分给我,我发个例子给你,我以前毕业设计的一部分,很基础,适合初学者,,你只能知道三层是怎么进行数据操作而已,数据库的连接你自己处理,因为数据库连接的DLL串我已经删了,有兴趣的话QQ:178758908,
      

  3.   

    我的做法:1: SQL语句存数据库中 -- 建立对应数据庥别名
    2:客户端使用数据库别名调用数据,及传递请求参数(不固定)
    3:中间层根据客户端的请求进行SQL语句组装与初始化(如请求条件)
    4:提交时传递TClientDataSet.Delta给中间层,中间层进行解释并判断数据有效性执行更新,更新后将错误返回客户端,客户根据返回结果合并Log,并将错误显示给用户*客户端所有TClientDataSet都不连TDataSetProvider控件,只用TStockConnection控件调用中间层接口完成数据的获取与提交工作,中间层仅需要两个TDataSetProvider与一个TADOQuery与二个TAdoStoreProcedure控件即可,其它的全为解释执行程序(才1400来行)
    缺点:现在遇到一个问题,通过Internet(动态IP 仅开一个端口)访问中间层的时候,不能使用TDataSetProvider控件  VPN则没问题    其它一切正常
    没看过多少书(书中的太麻烦了,个人认为不太适合做大型系统),所以不知这是否叫三层呢???
      

  4.   

    这方面的书很少,我举个例子给你看吧
    应用程序服务器:
    先创建一个远程数据模块
    在VIEW->TYPE LIBRARY->建立一个方法mm
    远程数据模块创建时连接数据库 
    procedure Ttestapp.RemoteDataModuleCreate(Sender: TObject);
    begin
    ADOConnection1.ConnectionString :=' Provider=SQLOLEDB.1;'+
        'Persist Security Info=False;User ID='+GetRegInfo(3)+';Password='+GetRegInfo(4)+';'+
        'Initial Catalog='+GetRegInfo(2)+';Data Source='+GetRegInfo(1);
    end;定义方法的数据操作
    procedure Ttestapp.mm;
    begin
     ADODataSet1.Close;
     ADODataSet1.CommandText:='select * from MaintManView';
     ADODataSet1.Open;
    end;客户端调用:procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
    DataModule2.APPS.mm;
    ClientDataSet1.close;
    DataModule2.ClientDataSet1.Open;
    end;接下来就是你对数据集的处理了
      

  5.   

    四层处理模式:client-App remote-App server-server
    我们在开发大系统时多半用以上模式.
      

  6.   

    BORLAND搞的MIDAS这东西为什么很少见到成型的软件?
    开发起来真的是很麻烦,还不如用ASP呢
      

  7.   

    那如何操作 XML ?
    有没有方便的方法?
      

  8.   

    zdq801104(我很笨,但是我不傻!) 最简单,但是绝对是最基础的。其他的就是在这个基础上作对象分析,OOA,OOD
      

  9.   

    根据以上讨论,,我发表自己的意见
    1.慨念模糊:
      并不1是客户端不能发送SQL语句,因为简单的查询可以用客户端来完成!!中间层是用来减轻服务器的工作的,同时封装业务逻辑的!!它不是万能的!!数据库服务器,可以向中间层提供服务,三个层次不是各自独立的!!!
    2。层次不明显:
      既然独立了中间层,为什么要大量使用存储过程,触发器等数据库的服务!!当然不是说不能用,要
    少用,才能达到最好的效果!!不然要中间层来干什么!!
    3。CLIENTDATASET或MIDAS《》分布式!!!
      不要以为独立了中间层就是分布式了,,那还早呢!!!以上只是在下愚论,,,有得罪之处,请各位包含!!
      

  10.   

    还有,,我不喜欢将业务放在DATAPROVIDER的事件来完成!!,因为这样做太危险!!
      

  11.   

    最后,副简单例子
    服务器:
    function MSearch(const PSql: WideString): OleVariant;
    begin
      AQSearch.Close;
      AQSearch.SQL.Clear;
      AQSearch.SQL.Text:=trim(Psql);
      AQSearch.Open;
      if not AQSearch.IsEmpty then
      begin
        Result:=DspSearch.Data;
      end else
      begin
        Result:=Null;
      end;
      AQSearch.Close;
    end;客户端:
    Function OpenDb(ViewTable,State_Num:String):Boolean;
    Var
      Sql:String;
      Datas:Olevariant;
    begin
      Result:=False;
      Sql:='Select * From '+ViewTable+' Where State_Num='+trim(STate_Num);
      datas:=Null;
      try
        datas:=ClientDm.ATest.MSearch(Sql);
        If Not VarisNull(Datas) Then
        begin
          CdsData.Data:=datas;
          CdsData.Open;
          Result:=true;
        end;
      except
      end;
    end;
      

  12.   

    TO: Erice(白雪公猪) 你的例子确实让程序员可以更方便的控制数据,我也曾经这样用过,但我总觉得这种用法DataSetProvider仅仅起到了封装数据的作用,而实际上它的功能远不止这些.
    请楼下继续发言,发表看法!
      

  13.   

    真正的三层也很容易做到,买一个中间件服务器不久得了!
    IBM MQ, BEA Texido, 国产的还有TongLink 系列。
    自己作可就比较困难了,还有一个值得不值得的问题, 风险很大。
      

  14.   

    3層體現在架構思想上, 可以參照以下C#的案例, 將整個程序分為了N層
    業務實體層 數據訪問層 業務規則層 業務外觀層 用戶界面層 
    這是一個步步向上的層次 下層的不能訪問上層, 
    目前, 3層的焦點主要 數據量的控制上, 主要體現在數據的壓縮訪法,
    多線程的共同訪問(主要體現在利用dll的實現) 還有一點是如何跨平台
    的問題, 所傳輸的報文應採用xml這個世界通用的方式了
      

  15.   

    三层只是逻辑上的一个概念。可以分为客户端(brower,ClinetTools...),中间件服务器(Midas,MTS/COM...),数据库服务器(DB2,Oracle,MSSQL....)
      

  16.   

    DataSetProvider:实际只是个数据封包,,不要用它来完成自己的业务,这是不明智的选择
      

  17.   

    TO:Erice(白雪公猪) 如果只用它作数据封包的话,那么势必要写很多代码.而且中间层会有很多的接口方法供服务器端调用,这样的话我想很难做到接口方法的通用性!
      

  18.   

    DreamStrat(梦启动的摇篮…) 说的有道理,顶一下。
      

  19.   

    TO zhangl_cn(五台山的和尚也编程) ( ) :所有的COM接口都有自己的调用规则,DataSetProvider只是MIDAS的基础,为DCOM提供一种封包模式,如果用DataSetProvider来控制业务-----
    1。会造成程序运行缓慢;
    2。跟踪不了业务;
    3。随着数据量的增大,程序会崩溃;
    以上只是自己在开发中的体会,纯属一面之辞,得罪处,见谅
    希望,继续交流!!!
      

  20.   

    I have asked a question about b/s,but no one answer for me ,