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
- 资源: 25
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- NSArgumentNullException如何解决.md
- VueError解决办法.md
- buvid、did参数生成算法
- tiny-cuda-cnn.zip
- 关于月度总结的PPT模板
- 手表品牌与型号数据集,手表型号数据
- 基于Java实现(IDEA)的贪吃蛇游戏-源码+jar文件+项目报告
- 数字按键3.2考试代码
- 颜色拾取器 for Windows
- 台球检测40-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- # 基于MATLAB的导航科学计算库
- Qt源码ModbusTCP 主机客户端通信程序 基于QT5 QWidget, 实现ModbusTCP 主机客户端通信,支持以下功能: 1、支持断线重连 2、通过INI文件配置自定义服务器I
- tesseract ocr 训练相关的环境部署包,包括jdk-8u331-windows-x64.exe、jTessBoxEditorFX-2.6.0.zip 等
- 好用的Linux终端管理工具,支持自定义多行脚本命令,密码保存、断链续接,SFTP等功能
- 大学毕业设计写作与答辩指南:选题、研究方法及PPT制作
- 小偏差线性化模型,航空发动机线性化,非线性系统线性化,求解线性系统具体参数,最小二乘拟合 MATLAB Simulink 航空发动机,非线性,线性,非线性系统,线性系统,最小二乘,拟合,小偏差,系统辨