逆水行船

别人的天堂,是我的异乡;无端的繁华,倍添我的惆怅

 

数据库操作的抽象类

 编号 方法 描述 返回值 参数
1 Add 实现添加功能。 void DT类
2 AddPlus 实现带逻辑的添加功能。(例如:判断记录是否已经存在) void DT类
3 Edit 实现编辑功能。 void DT类
4 EditPlus 实现带逻辑的编辑功能。  void DT类
5 Delete 实现删除功能。 void DT类
6 Get 取得一条记录。 BaseDT DT类
7 GetAllList 取得所有记录。 DataTable DT类
8 GetAllListView 取得所有记录的视图数据。 DataTable DT类
9 GetDataSource 取得单选框之类的数据源。 DataTable DT类
10 IsExist 判断记录是否已经存在。(为添加) bool DT类
11 IsExistForEdit 判断记录是否已经存在。(为编辑) bool DT类
12 GetValue 取得一个值。  object DT类,字段名
13 (事件)OperEvent 添加/编辑中的其他操作 void DT类
14 GetList 取得数据列表(带条件) DataTable DT类
15 (属性)ErrorText 错误信息 string
16 ClearErrorText 清除错误信息 void
17 (属性)IsError 判断是否有错误信息提出。 bool
18 IsExist 判断符合某个条件的记录是否存在 bool

sql对象

19 (虚函数)GetBaseSQL 根据对象类型生成IBaseSQLable对象。 IBaseSQLable

DT对象

20 GetListSQL 取得带条件SQL语句 string
21 ErrorType  常用的错误提示信息。 class
22 (属性)IsUsingTrans  是否使用事务。 bool
23 (事件)OperLastEvent 完成添加后的操作。 void DT对象
24 (事件)OperEventTrans 添加/编辑中的其他操作 void DT对象,数据库操作对象
25 (事件)OperLastEventTrans 完成添加后的操作。 void DT对象,数据库操作对象
26 (属性)IsUsingExist 是否判断有相同的记录存在。(默认值:tru) bool



AddPlus的流程:

/// <summary>
  /// 实现带逻辑的添加功能。
  /// </summary>
  /// <param name="detail"></param>
  public void AddPlus(DT detail)
  {
   // 清除错误信息
   ClearErrorText();

   // 判断记录是否存在
   if (IIsUsingExist && IsExist(detail))
   {
    // 错误信息 ("Add_Exist")
    ErrorText = ErrorType.Add_Exist;
    return;
   }

   // 如果应用事务
   if (IsUsingTrans)
   {
    // 实现事务处理
    AddPlusStepTrans(detail);
   }
    // 如果不应用事务
   else
   {
    // 实现无事务处理
    AddPlusStep(detail);
   }
  }

  /// <summary>
  /// 无事务处理时的实现。
  /// </summary>
  /// <param name="detail"></param>
  private void AddPlusStep(DT detail)
  {
   // 清除错误信息
   ClearErrorText();

   if (OperEvent != null)
   {
    // 执行其他操作
    OperEvent(detail);

    // 如果出现错误
    if (IsError)
    {
     return;
    }
   }

   Add(detail);

   // 后续方法

   if (OperLastEvent != null)
   {
    OperLastEvent(detail);
   }
  }

  /// <summary>
  /// 事务处理时的实现。
  /// </summary>
  /// <param name="detail"></param>
  private void AddPlusStepTrans(DT detail)
  {
   // 清除错误信息
   ClearErrorText();

   bool selfTran = false;

   //事务处理
   if (curDBOperater.baseTransaction == null)
   {
    curDBOperater.BeginTran();
    selfTran = true;
   }

   try
   {

    if (OperEventTrans != null)
    {
     // 执行其他操作
     OperEventTrans(detail, curDBOperater);

     // 如果出现错误
     if (IsError)
     {
      // 回滚事务
      curDBOperater.RollBackTran();
      return;
     }
    }

    Add(detail);

    // 后续方法
    if (OperLastEventTrans != null)
    {
     OperLastEventTrans(detail, curDBOperater);

     // 如果出现错误
     if (IsError)
     {
      // 回滚事务
      curDBOperater.RollBackTran();
      return;
     }
    }

    // 提交事务
    if ( selfTran )
    {
     curDBOperater.CommitTran();
    }
   }
   catch(Exception ex)
   {
    // 回滚事务
    curDBOperater.RollBackTran();
    throw ex;
   }
   finally
   {
    if ( selfTran )
    {
     curDBOperater.baseTransaction.Dispose();
    }
   }
  }


我忘记了几个地方:
1:事务的应用。
2:添加成功后的后续方法。

posted on   荣-  阅读(566)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

导航

统计

点击右上角即可分享
微信分享提示