package com.zkqy.execution.produce.dispersed.service;


/**
 * 脚本接口
 * 作用： 仅为一个标识接口，实现类可以直接被注入到脚本执行引擎，进行计算。
 * 参数： 一般采用map形式传输参数，例如表名、参数、条件等等
 *
 * @author hzh
 */
public interface IScriptService<J> {

    /**
     * 执行脚本前验证
     *
     * @param parameter
     * @return
     */
    J preExecutionScript(J parameter);

    /**
     * 执行脚本
     *
     * @param parameter
     * @return
     */
    J executionScript(J parameter)  ;

    /**
     * 执行脚本后验证
     *
     * @param parameter
     * @return
     */
    J afterExecutionScript(J parameter);

    /**
     * 验证脚本bean是否存在 在流程执行前会验证当前流程所绑定的节点脚本等
     * 或其他验证使用
     *
     * @return
     */
    boolean isVerificationMethod();

    /**
     * 用来清理prototype作用域bean 因spring不会帮助清理
     * 注：定义成prototype类型的bean，可以避免并发的操作。applicationContext.getBean() 每次都会返回一个新的实例
     *
     * @return
     */
    boolean preDestroy();

}
