• try catch 块的使用原则


    举一个NHibernate的例子
    ISession session;
    ITransaction tx;

    try
    {
    session = factory.OpenSession();
    tx = session.BeginTransaction();
    // do database work
    tx.Commit();
    session.Close();
    }
    catch (Exception ex)
    {
    tx.Rollback();
    session.Close();
    // further exception handling
    }

    I can’t claim to know the inner workings of OpenSession but if there’s a chance it throws and surfaces an exception, the catch is going to access a null reference, tx. General advice:

    Acquire Resource;
    Try
    Do Something with Resource
    Catch
    Do something
    Finally
    Release Resource


    Actually there’s a semantic implication of OpenSession. To me it should either return a valid ISession reference to an open reference or it should throw an exception. The same goes for BeginTransaction. So, IMHO this is how to write it (my 2c):

    ISession session = factory.OpenSession();
    try
    {
      ITransaction tx = session.BeginTransaction();
      try
      {
        // do db work
        tx.Commit();
      }
      catch
      {
        tx.Rollback();
      }
    }
    finally
    {
      session.Close();
    }

    Both session in finally and tx in catch will be valid references provided that OpenSession and BeginTransaction returns what they atomically should return, i.e. an open session in the former case and a started transaction in the latter case.


  • 相关阅读:
    SpringBoot梳理一(快速上手及常用配置)
    C# .NET写入记事本(规范版)
    PhpStorm安装及汉化
    C# .NET发送邮件方法
    Maven安装教程
    plsql连接Oracle数据库安装及配置
    Mysql常用SQL语句整理
    C#字符串处理和时间格式化整理
    PHP字符串处理和时间格式化整理
    pandas的小技巧
  • 原文地址:https://www.cnblogs.com/idior/p/139182.html
Copyright © 2020-2023  润新知