谈谈数据库开发的分层

        最近在为平台设计数据库表结构及开发接口,力求做到分层合理,扩展性好。系统是基于win socket开发的系统,非纯粹的数据库业务系统。数据库是其中很小的一部分。下面分别写做过的两种模式。

       第一种模式是类似MVC的实体+视图+容器模式,这种情况下一般需要设计这几个方面,根据表结构设计一些model,一般是record, 或者class。然后对每个表设计一个操作class(暂且叫着VIEW),主要做接口用,提供增,删,改,查等操作,参数一般都是model。为了使系统兼容多种数据库,我们必须设计一个DBHelper这样的抽象类,然后根据不同的数据系统派生出各个子类,比如MySqlDBHelper, SQLServerDBHelper等,这样一个简单的分层操作完成,结构如下:

 

    目前view中的查询有个问题,返回给客户端是一个数据集,在c#.net中可以是DataSet,在delphi下可以是ClientDataSet.Data。这样的接口只能在同一种开放语言中使用。比如ClientDataSet.Data除了delphi的midas知道他是什么别人无法知道(未公开结构),虽然可以通过保存为xml查看数据。尤其是通过tcp/ip传输显然是不行的(无法知道Data,DataSet大小,而且接收端不一定是delphi或者c#.net开放)。这样必须将Data或者DataSet中的记录根据对应model逐条封包(需要注意字节序问题)通过socket发送,这样接收端就可以根据发送端提供的model(这时候叫协议)解析接收到的包,这个过程中对Data或者DataSet的封包效率是很关键的。基于同一种语言开放就不需要这么麻烦了,比如delphi下可以使用dcom,webservice等,都有现成的控件可以使用,这样效率也高。

 

   水平有限, 先写到这里,错误之处还请留言指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值