NickLee.ODRM模式说明和演示源代码下载

NickLee.ODRM构架模式
2007.1.10:新修改ODRM,去掉IDomain接口,利用反射和ComponentModel保持对象层的完整性,并修改LLGen.exe代码生成器,去掉代码生成器中的IDomain部分。
2007.1.20
    ODRM修改函数:public static bool ObjectDataEqual(object Fristobj, object Equalobj, ref string errMethod);
                                   public static Hashtable ObjectConvertHashtable(object objModel);

    UIFactory增加函数 public static Hashtable UIFactory_Clear(Control page);
                                      public static Hashtable UIFactory_NotReadOnly(Control page);

下载地址:
http://files.cnblogs.com/mail-ricklee/ODRM.part01.rar
http://files.cnblogs.com/mail-ricklee/ODRM.part02.rar
http://files.cnblogs.com/mail-ricklee/ODRM.part03.rar

ODRM演示操作说明
1.新增,查询无特殊说明
2.删除操作,请Ctrl+鼠标左键,可以多个选择,并可以选择不同页面的数据,同时删除
3.修改页面分为普通数据修改和密码修改
4.请在Sqlserver2005中新建数据库,名称为ODRM,并使用ODRM.bak文件还原,如果为2000数据库,请使用Visio文档的数据字典正向生成数据库

ODRM构架模式优点:
Object/DataSet Relational Mapping(对象/数据集关系映射)模式是在开源ORM映射的基础上结合NickLee.UIFactory和NickLee.Web.UI综合而成的一种灵活,快捷,简单的.net开发模式。因为其结合.net 的数据对象DataSet和ORM的优点,所以命名为Object/DataSet Relational Mapping
整合了以下优点
1.UI的灵活性
可以使用.net或者任意的三方控件,提高客户体验
2.对象化的业务处理
虽然UI层数据填充采用DataSet的方式,但业务处理的时候,可以通过NickLee.ODRM转化为有数据的对象实体,进行处理
3.清晰,快速的访问数据,以及注入攻击的防范
通过IBatisNet原始的机制,并修改了QueryForDataSet,QueryForOracleDataSet,利用IBatisNet在xml中书写清晰sql语句的作用和事务机制,使sql能完整地层现在xml中,以便于开发人员处理和修改。并有效的防止注入攻击。
通过QueryForDataSet,QueryForOracleDataSet,实现了ORM中对象和xml关系的分离,整个业务可以不同步对象和xml中的<resultMaps>和<alias>(当然,原始的IBatisNet机制我们没有修改,开发人员可以选择使用IBatisNet原始的ORM机制也可以使用我们扩充的QueryForDataSet,QueryForOracleDataSet模式)
4.对象实体,DataSet,Hashtable的互相转换
通过ODRM可以实现灵活的三个对象之间互相转换,这样无论任何数据,都可以以其中一种模式存在并可转
化为其他模式
5.整合的NickLee.Framework资源
通过整合的NickLee.Web.UI,NickLee.Common,NickLee.UIFactory,NickLee.ODRM等NickLee.Framework资源,以及IBatisNet对应代码生成器,很大的提高.net(BS)模式的开发效率和提高了客户体验以及减少校验量(比如日期,百分比,数字,金额,电话,邮编等)。

ODRM构架模式详细说明
1.ODRMLibrary
对于UI层,有的需要以dll的形式配置的,都可以放在ODRMLibrary中处理
2.ODRMDomain(数据库表映射对象实体)
已经断开ORM联系的对象实体,负责定义数据库表对应的属性,并为ODRMRule,ODRMController,ODRMWeb提供对象实体支持
3.ODRMRule(数据层)
负责传入的数据同数据库进行交互
    3.1 RuleBase
 所有Rule类的基类,负责声明和定义通用函数和属性
    3.2 IBatisNet
 数据库交互ORM,并可以实现事务,存储过程、函数等交互,动态配置查询在XML中
 增加函数IBatisNet.DataMapper.Mapper.Instance().QueryForDataSet(),IBatisNet.DataMapper.Mapper.Instance().QueryForOracleDataSet(),可直接查询返回DataSet,而不需要通过ORM返回映射结果。
 增加函数IBatisNet.DataMapper.Mapper.ReloadXml(),由于IBatisNet的机制为在第一次载入的时候所有的xml读入缓存,该函数提供动态重新载入xml进入缓存的,在修改xml不需要重新启动IIS,只需要调用该函数即可。
4.ODRMController(业务层)
负责业务数据校验和处理,完成处理后转入ODRMRule(数据层)与数据库交互数据
    4.1 ControllerBase
 所有Controller类的基类,负责声明和定义通用函数和属性
5.ODRMWeb(UI层)
配置层现页面,以及填充数据
    5.1 IPage,IListPage,IEditPage
 UI层接口,在编码人员编码的时候提醒编码人员需要实现的接口
    5.2 PageBase
 所有页面的基础类,负责声明和定义通用函数和属性,并负责基础Session的处理
6.NickLee.UIFactory
 获取或者设置页面控件的值,或者设置页面控件状态。
7.NickLee.ODRM
 提供对象实体,DataSet,Hashtable的互相转换函数,实现互相转换
9.LLBLGen
 IBatisNet对应代码生成器,直接生成C#语言的Domain层,以及简单新增,修改,查询,删除语句的代码生成器
8.NickLee.Framework
 集成的UI中间件和类库资源库,150个以上资源包。独立演示请下载NickLee.Framework.X.X.X.X.rar

参考下载地址
1.IBatisNet:www.ibatis.org
3.NickLee.Framework下载:http://www.cnblogs.com/mail-ricklee

数据库连接修改文件database.config



ODRM函数

ContractedBlock.gif ExpandedBlockStart.gif Object/DataSet Relational Mapping(对象/数据集关系映射)
None.gifusing System;
None.gif
using System.Collections;
None.gif
using System.Data;
None.gif
using System.Reflection;
None.gif
None.gif
namespace NickLee.Common
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    
// 摘要:
InBlock.gif    
//     Object/DataSet Relational Mapping(对象/数据集关系映射)
InBlock.gif
    public class ODRM
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
public ODRM();
InBlock.gif
InBlock.gif        
// 摘要:
InBlock.gif        
//     转换为DataTable
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   Source:
InBlock.gif        
//     数据源
InBlock.gif        
//
InBlock.gif        
//   DataMember:
InBlock.gif        
//     数据表名称
InBlock.gif
        public static DataTable ConvertDataTable(object Source, string DataMember);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     返回DataTable为哈希表键值对
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   SourceTable:
InBlock.gif        
//     数据行对象
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     填充后哈希表
InBlock.gif
        public static Hashtable DataRowConvertHashtable(DataRow SourceRow);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     数据集中一行DataRow转换为指定对象,并填充数据
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   row:
InBlock.gif        
//     数据集中一行
InBlock.gif        
//
InBlock.gif        
//   objModel:
InBlock.gif        
//     指定对象
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     填充后对象
InBlock.gif
        public static object DataTableConvertObject(DataRow row, object objModel);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     数据集中一行DataRow转换为指定对象,并填充数据 baseAssembly请使用:System.Reflection.Assembly.LoadFrom()获取程序集
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   row:
InBlock.gif        
//     数据集中一行
InBlock.gif        
//
InBlock.gif        
//   baseAssembly:
InBlock.gif        
//     程序集
InBlock.gif        
//
InBlock.gif        
//   className:
InBlock.gif        
//     完整路径类名称
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     填充后对象
InBlock.gif
        public static object DataTableConvertObject(DataRow row, Assembly baseAssembly, string className);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     数据集中一行DataRow转换为指定对象,并填充数据
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   row:
InBlock.gif        
//     数据集中一行
InBlock.gif        
//
InBlock.gif        
//   AssemblyPath:
InBlock.gif        
//     程序集路径
InBlock.gif        
//
InBlock.gif        
//   className:
InBlock.gif        
//     完整路径类名称
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     填充后对象
InBlock.gif
        public static object DataTableConvertObject(DataRow row, string AssemblyPath, string className);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     哈希表对象转换为DataTable,并有一行DataRow
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   hTable:
InBlock.gif        
//     包含数据的哈希表
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     填充后数据表
InBlock.gif
        public static DataTable HashtableConvertDataTableWidthRow(Hashtable hTable);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     哈希表对象转换为DataTable,并有一行DataRow
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   hTable:
InBlock.gif        
//     包含数据的哈希表
InBlock.gif        
//
InBlock.gif        
//   DataMember:
InBlock.gif        
//     生成数据表名称
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     填充后数据表
InBlock.gif
        public static DataTable HashtableConvertDataTableWidthRow(Hashtable hTable, string DataMember);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     哈希表转换为对象
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   hTable:
InBlock.gif        
//     包含数据的哈希表
InBlock.gif        
//
InBlock.gif        
//   objModel:
InBlock.gif        
//     指定对象
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     填充后对象
InBlock.gif
        public static object HashtableConvertObject(Hashtable hTable, object objModel);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     哈希表转换为对象 baseAssembly请使用:System.Reflection.Assembly.LoadFrom()获取程序集
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   hTable:
InBlock.gif        
//     包含数据的哈希表
InBlock.gif        
//
InBlock.gif        
//   baseAssembly:
InBlock.gif        
//     程序集
InBlock.gif        
//
InBlock.gif        
//   className:
InBlock.gif        
//     完整路径类名称
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     填充后对象
InBlock.gif
        public static object HashtableConvertObject(Hashtable hTable, Assembly baseAssembly, string className);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     哈希表转换为对象
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   hTable:
InBlock.gif        
//     包含数据的哈希表
InBlock.gif        
//
InBlock.gif        
//   AssemblyPath:
InBlock.gif        
//     程序集路径
InBlock.gif        
//
InBlock.gif        
//   className:
InBlock.gif        
//     完整路径类名称
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     填充后对象
InBlock.gif
        public static object HashtableConvertObject(Hashtable hTable, string AssemblyPath, string className);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     哈希数据比较 作为在修改的时候或者其他时候判断是否做过处理
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   Fristobj:
InBlock.gif        
//     比较哈希表
InBlock.gif        
//
InBlock.gif        
//   Equalobj:
InBlock.gif        
//     被比较哈希表
InBlock.gif        
//
InBlock.gif        
//   errMethod:
InBlock.gif        
//     返回比较不一致对象
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     比较状态
InBlock.gif
        public static bool HashtableDataEqual(Hashtable Fristobj, Hashtable Equalobj, ref string errMethod);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     对象转换为DataTable,并有单行DataRow
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   objModel:
InBlock.gif        
//     有数据的对象
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     填充后数据表
InBlock.gif
        public static DataTable ObjectConvertDataTableWidthRow(object objModel);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     对象转换为DataTable,并有单行DataRow
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   objModel:
InBlock.gif        
//     有数据的对象
InBlock.gif        
//
InBlock.gif        
//   DataMember:
InBlock.gif        
//     生成数据表名称
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     填充后数据表
InBlock.gif
        public static DataTable ObjectConvertDataTableWidthRow(object objModel, string DataMember);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     对象转换为DataTable,并有多行DataRow
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   objModel:
InBlock.gif        
//     有数据的对象
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     填充后数据表
InBlock.gif
        public static DataTable ObjectConvertDataTableWidthRows(object[] objModel);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     对象转换为DataTable,并有多行DataRow
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   objModel:
InBlock.gif        
//     有数据的对象
InBlock.gif        
//
InBlock.gif        
//   DataMember:
InBlock.gif        
//     生成数据表名称
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     填充后数据表
InBlock.gif
        public static DataTable ObjectConvertDataTableWidthRows(object[] objModel, string DataMember);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     对象转化为哈希表
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   SourceTable:
InBlock.gif        
//     对象
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     填充后哈希表
InBlock.gif
        public static Hashtable ObjectConvertHashtable(object objModel);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     对象数据比较 作为在修改的时候或者其他时候判断是否做过处理
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   Fristobj:
InBlock.gif        
//     比较对象
InBlock.gif        
//
InBlock.gif        
//   Equalobj:
InBlock.gif        
//     被比较对象
InBlock.gif        
//
InBlock.gif        
//   errMethod:
InBlock.gif        
//     返回比较不一致对象或者类不一致提示
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     比较状态(false不一致,true一致)
InBlock.gif
        public static bool ObjectDataEqual(object Fristobj, object Equalobj, ref string errMethod);
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif


UIFactory函数

 

ContractedBlock.gif ExpandedBlockStart.gif UIFactory类
None.gifusing System;
None.gif
using System.Collections;
None.gif
using System.Data;
None.gif
using System.Web.UI;
None.gif
None.gif
namespace NickLee.Common
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    
// 摘要:
InBlock.gif    
//     UIFactory:UI对象工厂
InBlock.gif    
//
InBlock.gif    
// 备注:
InBlock.gif    
//     UI对象工厂支持的类型集合 Calendar, CurrencyBox, Button, DropDownList, ImageButton, Label,
InBlock.gif    
//     NumberBox, PageView, PercentBox, TextBox, ToolbarTextBox, LinkButton, WebEditor,
InBlock.gif    
//     MultiColumnComboBox, HtmlInputText, HtmlTextArea, HtmlInputHidden, HtmlInputFile,
InBlock.gif    
//     HtmlSelect
InBlock.gif
    public class UIFactory
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
public UIFactory();
InBlock.gif
InBlock.gif        
// 摘要:
InBlock.gif        
//     清空页面数据
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   page:
InBlock.gif        
//     页面
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     返回的哈希表
InBlock.gif
        public static Hashtable UIFactory_Clear(Control page);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     获取界面所有控件的ID和值
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   page:
InBlock.gif        
//     页面
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     返回的哈希表
InBlock.gif
        public static Hashtable UIFactory_Get(Control page);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     获取界面所有控件可以输入或者控制
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   page:
InBlock.gif        
//     页面
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     返回的哈希表
InBlock.gif
        public static Hashtable UIFactory_NotReadOnly(Control page);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     获取界面所有控件只读
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   page:
InBlock.gif        
//     页面
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     返回的哈希表
InBlock.gif
        public static Hashtable UIFactory_ReadOnly(Control page);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     设置界面所有控件的ID和值.默认第1行
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   page:
InBlock.gif        
//     页面
InBlock.gif        
//
InBlock.gif        
//   inTable:
InBlock.gif        
//     查询结果
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     返回的哈希表
InBlock.gif
        public static Hashtable UIFactory_Set(Control page, DataTable inTable);
InBlock.gif        
//
InBlock.gif        
// 摘要:
InBlock.gif        
//     设置界面所有控件的ID和值
InBlock.gif        
//
InBlock.gif        
// 参数:
InBlock.gif        
//   page:
InBlock.gif        
//     页面
InBlock.gif        
//
InBlock.gif        
//   inTable:
InBlock.gif        
//     查询结果
InBlock.gif        
//
InBlock.gif        
//   rows:
InBlock.gif        
//     第几行
InBlock.gif        
//
InBlock.gif        
// 返回结果:
InBlock.gif        
//     返回的哈希表
InBlock.gif
        public static Hashtable UIFactory_Set(Control page, DataTable inTable, int rows);
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif



                                                                                      TheFallAngel Team:NickLee

 


 

转载于:https://www.cnblogs.com/mail-ricklee/archive/2006/12/25/602555.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值