Enterprise Library 2.0很多人都已熟悉,有的人也在很多项目里做了应用, 很早以前也使用企业库的2.0做了一些项目,但感觉很多代码还是有些冗余和重复, 同时为了兼容现有的系统结构而不影响现有数据访问方式(包括代码生成器的DAL代码)不变, 对Enterprise Library 2.0 的调用进行了进一步封装(按我过去DbHelperSQL的思路),在不改变现有的DAL的方式下来使用企业库。 当然,你完全可以直接使用企业库做一些更灵活的应用,这里只是抛砖引玉的一个解决方案。 ### C#中企业库及其使用方法 #### 一、企业库简介 Enterprise Library 是由 Microsoft Patterns & Practices 团队开发的一套组件集,用于帮助开发者更高效地构建可扩展、可维护的应用程序。Enterprise Library 2.0 版本是其中的一个版本,它提供了多种服务与工具来支持软件开发中的各种需求,如缓存、日志记录、异常处理、数据访问等。 #### 二、企业库的重要性和特点 Enterprise Library 2.0 版本因其丰富的功能和良好的可扩展性,在很多项目中被广泛使用。它可以帮助开发者减少重复工作,并提供了一种标准化的方式来处理常见的开发问题。例如,通过使用企业库的数据访问块,可以简化数据库操作,提高代码的复用率和可维护性。 #### 三、存在的问题及改进方法 尽管 Enterprise Library 2.0 提供了强大的功能,但在实际使用过程中仍然存在一些问题,比如代码冗余和重复。为了更好地利用 Enterprise Library 2.0 并解决这些问题,可以采用以下策略: 1. **进一步封装**:可以通过封装 Enterprise Library 2.0 的调用来降低复杂度,使其更易于集成到现有的系统结构中。这样不仅可以保持原有系统的完整性,还可以减少代码的重复性。 2. **兼容现有数据访问方式**:确保新的封装方式不会影响现有的数据访问模式,包括任何代码生成器所生成的 DAL 代码。这意味着需要仔细设计封装接口,以确保与现有代码的无缝对接。 3. **示例代码**:下面是一个具体的示例,展示如何进一步封装 Enterprise Library 2.0 的数据访问功能。在这个例子中,我们创建了一个名为 `DbHelperSQL2` 的抽象类,该类提供了一些常用的数据访问方法,如获取表中某个字段的最大值、检查记录是否存在等。 ```csharp public abstract class DbHelperSQL2 { public DbHelperSQL2() { } #region 公用方法 /// <summary> /// 获取表某个字段的最大值 /// </summary> /// <param name="FieldName">字段名</param> /// <param name="TableName">表名</param> /// <returns>最大值加 1</returns> public static int GetMaxID(string FieldName, string TableName) { string strSql = "select max(" + FieldName + ") + 1 from " + TableName; Database db = DatabaseFactory.CreateDatabase(); DbCommand dbCommand = db.GetSqlStringCommand(strSql); object obj = db.ExecuteScalar(dbCommand); if (Object.Equals(obj, null) || Object.Equals(obj, System.DBNull.Value)) { return 1; } else { return int.Parse(obj.ToString()); } } /// <summary> /// 检测一个记录是否存在(SQL 语句方式) /// </summary> /// <param name="strSql">SQL 语句</param> /// <returns>是否存在</returns> public static bool Exists(string strSql) { Database db = DatabaseFactory.CreateDatabase(); DbCommand dbCommand = db.GetSqlStringCommand(strSql); object obj = db.ExecuteScalar(dbCommand); int cmdResult; if (Object.Equals(obj, null) || Object.Equals(obj, System.DBNull.Value)) { cmdResult = 0; } else { cmdResult = int.Parse(obj.ToString()); } return cmdResult != 0; } /// <summary> /// 检测一个记录是否存在(SqlParameter 语句方式) /// </summary> /// <param name="strSql">SQL 语句</param> /// <param name="cmdParms">参数集合</param> /// <returns>是否存在</returns> public static bool Exists(string strSql, params SqlParameter[] cmdParms) { Database db = DatabaseFactory.CreateDatabase(); DbCommand dbCommand = db.GetSqlStringCommand(strSql); BuildDBParameter(db, dbCommand, cmdParms); object obj = db.ExecuteScalar(dbCommand); int cmdResult; if (Object.Equals(obj, null) || Object.Equals(obj, System.DBNull.Value)) { cmdResult = 0; } else { cmdResult = int.Parse(obj.ToString()); } return cmdResult != 0; } #endregion } ``` #### 四、总结 通过上述的改进方法和示例代码,可以看出在不改变现有数据访问层的情况下,也可以有效地利用 Enterprise Library 2.0。这种封装不仅减少了代码的冗余性,还提高了代码的可读性和可维护性。当然,这只是一个基础的示例,实际应用中可以根据具体需求进行更加细致的设计和优化。
- 粉丝: 0
- 资源: 26
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 毕业设计《基于Python的南京二手房数据采集及可视化分析》+项目源码+文档说明
- 毕业设计《基于Springboot+Vue+Python深度神经网络学习算法水质管理预测》+项目源码+文档说明
- PLC项目 5号卸垛机.mwp
- 基于 nodejs+SQL server 实现的学生-教师评价系统课程设计
- PLC项目程序 2号卸笼.gxw
- BZ-00-03 C008053 SAP2000 刚性连接转换
- java图书管理微信小程序源码数据库 MySQL源码类型 WebForm
- Qt QChart绘制跟随鼠标的十字线
- Baidunetdisk_AndroidPhone_1023843j-1.apk
- PLC 程序 2号卸垛AD778899.gxw