【问题标题】:Design pattern to handle following scenario处理以下场景的设计模式
【发布时间】:2015-11-10 02:17:59
【问题描述】:

我正在为以下场景寻找一个好的设计模式,

我需要按照以下步骤操作,在每个步骤之后我需要更新数据库中的状态。为此,我在该 updateStatus(String status) 中创建了一个单独的类 UpdateStatusDAO 将更新数据库中的详细信息。步骤是,

1. Update Status as Processing Started
2. Read File
3. Update Status as Reading Completed
4. Process File 
5. Update Status as File Processing Completed
6. Rename File
7. Update Status as File Rename Completed
8. Update Status as Processing Completed

try{

    UpdateStatusDAO updateStatusDAO = new UpdateStatusDAO();

    updateStatusDAO.updateStatus("Process Started");

    // Read File
    try{

    } catch(Exception e){        
        throw new Exception();
    } finally{
    }

    updateStatusDAO.updateStatus("Reading Completed");

    // Process File
    try{

    } catch(Exception e){
         throw new Exception();
    } finally{
    }

    updateStatusDAO.updateStatus("File Processing Completed");

    // Rename File
    try{

    } catch(Exception e){
         throw new Exception();
    } finally{
    }

    updateStatusDAO.updateStatus("File Rename Completed");

    updateStatusDAO.updateStatus("Processing Completed");


} catch(Exception e){

} finally{

}

问题是,假设由于某种原因文件处理失败。然后我需要将状态更新为阅读完成。未完成文件处理。我添加如下,

  1. 如果 ReadFile / Process File 发生任何异常,我将抛出异常,则不会发生进一步的更新。

有没有其他更好的方法来处理这种情况。 ?

【问题讨论】:

标签: java design-patterns


【解决方案1】:

您可以考虑使用Finite State Machine。每一步完成后,您将进入下一步。如果任何步骤失败,您将进入错误状态(您需要创建)。错误状态总是可以自行前进,直到错误得到解决(也许错误的解决可能包括另一组步骤/状态,或者解决可能需要手动修复,您只需在修复后重置机器它)。每个步骤都有自己的任务,并且独立于其他步骤的工作。

【讨论】:

    【解决方案2】:

    在 Java 中,您可以为此使用状态机编译器(请参阅SMC)。更一般地说,您可以使用state pattern 实现自己的状态机。

    【讨论】:

      猜你喜欢
      • 2011-05-09
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 2014-11-09
      • 1970-01-01
      • 2019-11-30
      相关资源
      最近更新 更多