用于处理以下场景的设计模式

时间:2015-11-09 14:26:37

标签: java design-patterns

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

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

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上发生任何异常,我将抛出异常,然后不会进行进一步的更新。
  2. 还有其他更好的方法来处理这种情况。 ?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

在Java中,您可以使用状态机编译器之类的东西(参见SMC)。更一般地说,您可以使用state pattern实现自己的状态机。