incubator-seata-go
incubator-seata-go copied to clipboard
State machine configuration in seata-go Saga
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
StateMachineConfiginterface 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:
-
Interface Definition:
- Define the
StateMachineConfiginterface outlining the methods required for configuring the state machine.
- Define the
-
Default Implementation:
- Implement
DefaultStateMachineConfigas a default configuration with sensible defaults.
- Implement
-
Non-Code Configuration:
- Implement a mechanism for users to define state machine configurations without writing code.
-
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.
assign me