• 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.


  • 相关阅读:
    Component 组件props 属性设置
    template 模版制作
    vue生命周期钩子函数
    Vue.set 全局操作 结构器外面修改数据
    Vue.extend 构造器的延伸
    vue.directive自定义指令
    实战笔记
    实战-第二讲 Vue-cli搭建开发环境
    实战-第一讲 画设计图
    webpack-第03节:配置文件:入口和出口
  • 原文地址:https://www.cnblogs.com/idior/p/139182.html
Copyright © 2020-2023  润新知