zoukankan      html  css  js  c++  java
  • 如何减少基于DataSet框架的代码输入量(一)

           前一段时间看了一阵子的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
    {
        
    ///<summary>
        
    /// SendOutEntity实体类
        
    ///</summary>

        public class SendOutEntity : BaseEntity
        
    {
            
    构造函数

            
    出库单

            
    发票号

            
    总计

            
    操作员

            
    操作员中文名

            
    客户代码

            
    客户中文名

            
    备注

            
    货款付讫

            
    出售日期
        }

    }
    using System;
    using System.Data;
    using FishSky.Data.Base;

    namespace FishSky.Data.Chateau
    {
        
    public class SendOutDataTable : BaseDataTable
        
    {
            
    表格常量 

            
    构造函数

            
    创建实体

            
    获取指定行号的实体

            
    设置实体值到DataTable
        }

    }

    using System;
    using System.Runtime.Serialization;
    using FishSky.Data.Base;

    namespace FishSky.Data.Chateau
    {
        [Serializable]
        
    public class SendOutDataSet : BaseDataSet
        
    {
            
    表格常量及数据表

            
    构造函数

            
    序列化的构造函数

            
    建立数据集的表格
        }

    }


      

  • 相关阅读:
    12_2 数据分析工具包。
    11_29
    11_28 mongoDB与scrapy框架
    11_28,selenium定位元素,cookies获取
    11_26爬虫find与findall
    day_93_11_25爬虫一requests,项目框架
    11_14flask的启动和orm,反向生成model
    11_13Local与偏函数
    11_12 路由与正则
    day83_11_1 阿里配python使用。
  • 原文地址:https://www.cnblogs.com/wildfish/p/307743.html
Copyright © 2011-2022 走看看