将业务逻辑和界面分离我觉得一个难办的问题在于如果要使用 DBGrid 来作为显示记录的工具,这个时候,这个 DBGrid 的数据怎么提取呢?
难道还用 TADOQuery 来取吗?这样会不会破坏业务对象的封装?象《Delphi 面向对象思想》中那样,从 TClientDataSet 中继承而来的业务数据集对象,还是需要一个用来保存字段信息的类(或者是 Record) ,这样一来还是会很麻烦。不知道大家在把业务逻辑和界面分离的时候都怎么处理的
好困惑啊
难道还用 TADOQuery 来取吗?这样会不会破坏业务对象的封装?象《Delphi 面向对象思想》中那样,从 TClientDataSet 中继承而来的业务数据集对象,还是需要一个用来保存字段信息的类(或者是 Record) ,这样一来还是会很麻烦。不知道大家在把业务逻辑和界面分离的时候都怎么处理的
好困惑啊
而且我一直不太明白应该怎么取得业务类的记录集,对 TClientDataSet 不太熟练,而其他的 TADOQuery 之类的好像不太好用
但怎么封装好业务对象,这个确实需要一定经验的啊,希望大家都讨论
我现在正在试用 ClientDataSet 作为界面中的 DataSet ,然后在业务对象中通过 TDataSetProvider 来输出 Data 。一定将相关经验和问题同大家一块讨论
但我发现,如果是通过 ClientDataSet.Data 进行赋值的话,因为并没有通过 客户端的 ClientDataSet 进行数据的提交更新,因此,应该在业务对象中的 Provider 来查看错误信息,是下面这个事件:DataSetProvider.OnUpdateError 这个事件和 ClientDataSet.OnReconcileError 事件的参数很类似
我现在的错误信息是 "违反了表的关键字约束,不能插入重复键" (大概意思)
可我并不是新增啊,我是在 ClientDataSet 中更改了某条记录,然后通过Provider.ApplyUpdates(ClientDataSt.Data,0,ErrCount);来进行更新
>把业务逻辑和界面分离的时候都怎么处理的
业务逻辑和DataSet没有关系,DataSet只是Delphi用于数据访问的通用接口。Data如果得到,和业务逻辑没有关系,是另外一个问题
可真是需要提供记录集给客户端的 DataSet 使用,显然:1. 怎么从业务对象取得记录集给客户端
2. 怎么根据客户端的记录集的更改而来修改业务对象的数据(反映到数据库)这便是我认为的需要处理的两个问题而 ClientDataSet 和 DataSetProvider 恰恰满足了这两个要求1. 在业务对象中返回 DataSetProvider.Data 给客户端的 ClientDataSet.Data 使用
2. 通过 DataSetProvider.ApplyUpdates(ClientDataSet.Data,0,out ErrCount) 来修改到数据库对于第一个是比较容易的,而对于第二个则需要注意相关的属性设置,不太容易