incubator-seata-go icon indicating copy to clipboard operation
incubator-seata-go copied to clipboard

State machine configuration in seata-go Saga

Open ptyin opened this issue 1 year ago • 1 comments

This is a subtask under the #618

Description:

In Java, users configure the state machine using spring.xml or by building a StateMachineConfig through code. In seata-go, we aim to provide users with a non-code approach to define state machine configurations, mirroring the implementation patterns observed in other Go projects.

The State Machine Configuration module has dependencies on various sub-modules. The development of specific functionalities will be incrementally added to the configuration as needed. For example, if the State Machine Configuration depends on ExpressionFactoryManager, the related methods need not be implemented initially. They can be added later when working on the expression part.

Implementation Details:

1. State Machine Configuration Interface:

  • Introduce a StateMachineConfig interface that defines the contract for configuring the state machine.

2. Default Implementation:

  • Provide a default implementation, DefaultStateMachineConfig, that serves as a baseline configuration with sensible defaults.

3. Non-Code Configuration:

  • Develop a mechanism allowing users to define state machine configurations without writing code. This could be through configuration files or any other non-code approach.

4. Incremental Functionality:

  • Recognize that the State Machine Configuration relies on various functionalities, and these functionalities can be added progressively. For instance, if the configuration later requires ExpressionFactoryManager, the corresponding initialization code can be added when working on the expression module.

Next Steps:

  1. Interface Definition:

    • Define the StateMachineConfig interface outlining the methods required for configuring the state machine.
  2. Default Implementation:

    • Implement DefaultStateMachineConfig as a default configuration with sensible defaults.
  3. Non-Code Configuration:

    • Implement a mechanism for users to define state machine configurations without writing code.
  4. Incremental Functionality:

    • Adopt an incremental approach to add functionalities to the configuration module as needed.

By implementing these steps, we can provide users with a flexible and user-friendly way to configure the state machine in seata-go, following non-code configuration patterns observed in other Go projects.

ptyin avatar Jan 03 '24 04:01 ptyin

assign me

ptyin avatar Jan 04 '24 07:01 ptyin