如何减少基于DataSet框架的代码输入量(一)
2005-12-29 22:56
429 查看
前一段时间看了一阵子的ORM,感觉有单表的都还简单,最头痛的就是如何控制多表关联那些没必要的SQL语句,可能自己还没什么仔细看的缘故吧。
目前拥有的框架是基于DataSet的,支持多表关联,已经可以彻底的摆脱Insert/Update/Delete语句了,后来又增加了UpdateObject 和 DeleteObject 来减少基于DataSet而能导致的Sql语句执行的次数烦多的缘故。现在为了减少程序员编码的痛苦,同时,又能得到编译时类型控制,往Data层增加Entity,一般是贫血Object,纯粹拥有属性,没有方法的。
原来是一个DataSet 囊括了构建DataTable的功能。现在增加BaseEntity ,BaseDataTable类。BaseEntity 有一个属性RowIndex ,用来保存对应的行号,如果是新增RowIndex=-1 否则对应行号。BaseDataTable 有3个虚方法:1。获取实体类 public virtual BaseEntity GetEntity(int rowIndex) 2。创建一个实体类 public virtual BaseEntity CreateEntity() 3。 把实体值转入DataRow中 public virtual bool SetEntity(BaseEntity entity)
这样,我们就可以使用代码生成器来构建我们需要的对象。
比如
OrdersDataSet 需要拥有 OrdersTable ItemsTable DeliveriesTable OrdersEntity ItemsEntity DeliveriesEntity
OrdersDataSet 只需要拥有3个Public 的 OrdersTable ItemsTable DeliveriesTable
OrdersTable 需要Override那三个方法,然后 使用OrdersEntity
ItemsTable以此类推.....
1.获取实体以及修改保存
OrdersEntity entity=ordersDataSet.OrdersTable.GetEntity(0) as OrdersEntity ;
Console.WirteLine("Order ID is"+entity.OrderID);
entity.Quantity=20;
ordersDataSet.OrdersTable.SetEntity(entity);
2.新增一个实体,并设置值以及保存入表格
OrdersEntity newEntity=ordersDataSet.OrdersTable.CreateEntity() as OrdersEntity;
newEntity.OrderID="xxxxx";
ordersDataSet.OrdersTable.SetEntity(newEntity);
当然了,如上的代码,如果移植到.Net2.0就可以充分的利用泛型,但是还有几个网站在1.1下, 不敢一下子更换。.........
通过这种封装,我们可以减少原本基于DataRow的赋值和获取值的麻烦,而且类型也是编译时安全的。
当然了,我知道这不可能时ORM :)因为我是使用硬编码,只是通过代码生成器可以减少编写这么多麻烦的重复的代码。事实也证明了这种方式的开发的快速性,不过,不够OO,因为是基于Table的。相对来说,对于大企业的大系统不适合,中小企业还可以吧,个人觉得:)
呵呵,虽然自己的框架不是优秀的,但是,用的习惯了,觉得还是很快的,虽然没有拥有那么多令人骄傲的特色,没有那么OO,但是也足够我自己用了~_~ ! 自己是多么的不求上进,但是依然要写很多Select语句来获取复杂的查询数据。
sample code 如下:
using System;
using FishSky.Data.Base;
namespace FishSky.Data.Chateau
using System;
using System.Data;
using FishSky.Data.Base;
namespace FishSky.Data.Chateau
using System;
using System.Runtime.Serialization;
using FishSky.Data.Base;
namespace FishSky.Data.Chateau
{
{
{
{
{
this.Tables.Add(SendOutTable);
//设置新增自动生成key字段
this.KeyTypeID = "SendOutNo";
}
#endregion
}
}
目前拥有的框架是基于DataSet的,支持多表关联,已经可以彻底的摆脱Insert/Update/Delete语句了,后来又增加了UpdateObject 和 DeleteObject 来减少基于DataSet而能导致的Sql语句执行的次数烦多的缘故。现在为了减少程序员编码的痛苦,同时,又能得到编译时类型控制,往Data层增加Entity,一般是贫血Object,纯粹拥有属性,没有方法的。
原来是一个DataSet 囊括了构建DataTable的功能。现在增加BaseEntity ,BaseDataTable类。BaseEntity 有一个属性RowIndex ,用来保存对应的行号,如果是新增RowIndex=-1 否则对应行号。BaseDataTable 有3个虚方法:1。获取实体类 public virtual BaseEntity GetEntity(int rowIndex) 2。创建一个实体类 public virtual BaseEntity CreateEntity() 3。 把实体值转入DataRow中 public virtual bool SetEntity(BaseEntity entity)
这样,我们就可以使用代码生成器来构建我们需要的对象。
比如
OrdersDataSet 需要拥有 OrdersTable ItemsTable DeliveriesTable OrdersEntity ItemsEntity DeliveriesEntity
OrdersDataSet 只需要拥有3个Public 的 OrdersTable ItemsTable DeliveriesTable
OrdersTable 需要Override那三个方法,然后 使用OrdersEntity
ItemsTable以此类推.....
1.获取实体以及修改保存
OrdersEntity entity=ordersDataSet.OrdersTable.GetEntity(0) as OrdersEntity ;
Console.WirteLine("Order ID is"+entity.OrderID);
entity.Quantity=20;
ordersDataSet.OrdersTable.SetEntity(entity);
2.新增一个实体,并设置值以及保存入表格
OrdersEntity newEntity=ordersDataSet.OrdersTable.CreateEntity() as OrdersEntity;
newEntity.OrderID="xxxxx";
ordersDataSet.OrdersTable.SetEntity(newEntity);
当然了,如上的代码,如果移植到.Net2.0就可以充分的利用泛型,但是还有几个网站在1.1下, 不敢一下子更换。.........
通过这种封装,我们可以减少原本基于DataRow的赋值和获取值的麻烦,而且类型也是编译时安全的。
当然了,我知道这不可能时ORM :)因为我是使用硬编码,只是通过代码生成器可以减少编写这么多麻烦的重复的代码。事实也证明了这种方式的开发的快速性,不过,不够OO,因为是基于Table的。相对来说,对于大企业的大系统不适合,中小企业还可以吧,个人觉得:)
呵呵,虽然自己的框架不是优秀的,但是,用的习惯了,觉得还是很快的,虽然没有拥有那么多令人骄傲的特色,没有那么OO,但是也足够我自己用了~_~ ! 自己是多么的不求上进,但是依然要写很多Select语句来获取复杂的查询数据。
sample code 如下:
using System;
using FishSky.Data.Base;
namespace FishSky.Data.Chateau
using System;
using System.Data;
using FishSky.Data.Base;
namespace FishSky.Data.Chateau
using System;
using System.Runtime.Serialization;
using FishSky.Data.Base;
namespace FishSky.Data.Chateau
{
{
{
{
{
this.Tables.Add(SendOutTable);
//设置新增自动生成key字段
this.KeyTypeID = "SendOutNo";
}
#endregion
}
}
相关文章推荐
- 如何减少基于DataSet框架的代码输入量(二)
- 如何减少基于DataSet框架的代码输入量(三)
- 基于ExtJs框架实现高级查询界面的代码
- 基于Metronic的Bootstrap开发框架经验总结(18)-- 在代码生成工具Database2Sharp中集成对Bootstrap-table插件的分页及排序支持
- 幸福框架:如何阅读幸福框架的代码
- 基于ONVIF协议的(IPC)客户端程序开发-3:使用gSOAP生成Web Services框架代码
- asp.net+JSON+Ajax(基于Prototype框架1.4)做无刷新的2级DropDownList代码实例
- 分布式消息总线,基于.NET Socket Tcp的发布-订阅框架之离线支持,附代码下载
- 分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载 推荐
- 如何屏蔽防止别的网站嵌入框架代码
- Python交互环境下如何输入代码
- mui框架输入代码块激活字符,怎么快速生成代码块的完整代码
- 基于java社会化海量数据采集爬虫框架搭建(附代码)
- 基于.NET CORE微服务框架 -浅析如何使用surging
- 软件敏捷开发平台1.0(基于框架的代码全自动生成)
- 如何限制文本框只能输入数字,小数点,英文,汉字等各类代码
- 如何有效的减少重复的代码
- 如何基于nand flash启动Linux内核(分享一段实用、简单、类似bootloader功能的代码)
- Java&Android开源库代码剖析】のandroid-async-http(如何设计一个优雅的Android网络请求框架,同...
- 如何在代码中减少if else语句的使用