回复 寒枫天伤 - PSP 的问题
2005-01-09 10:32
162 查看
今天收到“寒枫天伤 - PSP”的问题(老大,名字能不能简单点,好难打也),询问载体设计的问题,乱谈一下吧,不好你当胡扯蛋了。
载体的设计有俩个思路,一个是表格式的,一个是层次的。
ms的ADO、DataSet就是表格式的,采用行、列组成的表,然后表集合之间建立联系。他更贴近关系型数据库的结构,因此使用简单、可以充分利用已经成熟的大量研究成果。缺点就是他是抽象的,不直观。
通常的xml和O/R的设计就是层次的,局部来说也是行(集合)、列(属性)组成表(对象),区别是表(对象)之间不是平等的关系,而是建立了有点像树一样的结构。好处吗,编写代码的时候看着舒服些罗(不是我打击你),缺点吗,一沓子了,我最头大的是数据跟踪问题。
我无法在一片文章中说明所有的事情,例如序列化、继承原则、CRUD、数据跟踪一大堆要处理的事情。
先说说 IBindList和ICancelAddNew接口吧,IBindList是列表绑定的基础接口,他继承于IList接口,如果你想绑定到某个表格或者列表中,IList基本上够了(实际上数组和ICollection也可以),但IBindList提供是否能新增、编辑和删除的选项,还提供排序、查找等功能(我可没有实现这个复杂的功能,我使用表格本身的功能),最重要的是他提供了ListChanged事件,这个是你通知外界你的集合发生改变的最好途径,所以你的集合最好是实现IBindList,而不紧紧是IList。
ICancelAddNew接口用在表格的编辑中,你使用表格的时候都知道你新建一行的时候可以按ESC键取消新建,实际内部的工作原理是:已经新建了行并添加到行集合,当你按ESC时,删除掉刚才的一行,所以你必须记住刚才新建的行是第多少行。 (如果没有记错的话,.net 1.1是没有这个接口的 ,.net 2.0才有)
下面的代码是部分的集合代码(不能运行的),不要以为我能写多好的程序,其实我是抄System.ComponentModel.Collections.Generic.BindingList<T>的。
namespace Mango.Common.Data
载体的设计有俩个思路,一个是表格式的,一个是层次的。
ms的ADO、DataSet就是表格式的,采用行、列组成的表,然后表集合之间建立联系。他更贴近关系型数据库的结构,因此使用简单、可以充分利用已经成熟的大量研究成果。缺点就是他是抽象的,不直观。
通常的xml和O/R的设计就是层次的,局部来说也是行(集合)、列(属性)组成表(对象),区别是表(对象)之间不是平等的关系,而是建立了有点像树一样的结构。好处吗,编写代码的时候看着舒服些罗(不是我打击你),缺点吗,一沓子了,我最头大的是数据跟踪问题。
我无法在一片文章中说明所有的事情,例如序列化、继承原则、CRUD、数据跟踪一大堆要处理的事情。
先说说 IBindList和ICancelAddNew接口吧,IBindList是列表绑定的基础接口,他继承于IList接口,如果你想绑定到某个表格或者列表中,IList基本上够了(实际上数组和ICollection也可以),但IBindList提供是否能新增、编辑和删除的选项,还提供排序、查找等功能(我可没有实现这个复杂的功能,我使用表格本身的功能),最重要的是他提供了ListChanged事件,这个是你通知外界你的集合发生改变的最好途径,所以你的集合最好是实现IBindList,而不紧紧是IList。
ICancelAddNew接口用在表格的编辑中,你使用表格的时候都知道你新建一行的时候可以按ESC键取消新建,实际内部的工作原理是:已经新建了行并添加到行集合,当你按ESC时,删除掉刚才的一行,所以你必须记住刚才新建的行是第多少行。 (如果没有记错的话,.net 1.1是没有这个接口的 ,.net 2.0才有)
下面的代码是部分的集合代码(不能运行的),不要以为我能写多好的程序,其实我是抄System.ComponentModel.Collections.Generic.BindingList<T>的。
namespace Mango.Common.Data
相关文章推荐
- 执行数学公式的函数 - 回复 "heyongan" 的问题
- 回复要“周全”: SCI英文论文修回稿回复信常见问题和错误分析
- (转)invalid s 在问题“为什么很多书看完了之后,回到生活中,还是该怎样就怎样? ”中的回复
- 知乎关于嵌入式若干问题的回复整理(转载)
- 回复了一个令人郁闷的in传能问题
- 让窗体接受拖放, 并获取拖过来的文件信息 - 回复 "海浪问" 的问题
- 下载并显示网上的图片之二(假如是 GIF 图片) - 回复 "fancy" 的问题
- 把流中的字符串转换为 UTF 格式 - 回复 "lostapple" 的问题
- 分割图片的例子 - 回复 "小熊宝" 的问题
- 详解 EnumWindows 与 EnumWindowsProc - 回复 "SplendourChiang" 的问题
- 回复几个问题
- 如何让 TreeView 的列表项携带数据、并读出或删除这个数据 - 回复 "Splendour" 的问题
- 窗口跟随 - 回复 "heyongan" 的问题
- 如何在数据表中存取图片 - 回复 "三足乌" 的问题
- 如何放缩 TWebBrowser 中的页面 - 回复 "飘逸的蓝" 的问题
- 从 EXE 或 DLL 中获取图标的函数 - 回复 "小李子子" 的问题
- 将 4 个 Byte 合成 1 个 Integer 的五种方法 - 回复 "三足乌" 的问题
- [redmine问题回复】redmine安装好后,在什么地方增加cvs配置库CVSROOT
- 回复《SharePoint无代码工作流设计开发实例——交通费报销流程(二)》文章中的问题
- 存取 ListBox 列表 - 回复 "徐强" 的问题