feat: refactor client module to resolve circular dependencies #2399
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
At the beginning, we planned to resolve circular dependencies by splitting configuration logics of config package to modules that they belong to. For example, move config.RegistryConfig and its configuration logics to registry package, then config package rely on registry package. Please refer to #2377.
But we found that it is difficult to resolve because of the existing of /common/extension module. If we change it, it will be the same as refactoring the whole dubbo-go. This is clearly not the amount of work that the Triple branch can handle.
To present to users the effect of layering and ensure the correctness of user-side API, we decide to take an ugly approach. For example, make a copy of config.RegistryConfig and put it to registry package. In the client module, we expose WithRegistries(registries map[string]*registry.RegistryConfig) to users. But client module would call compatRegsitryConfig to turn registry.RegistryConfig into config.RegistryConfig.
This is a temporary approach. When we decide to refactor dubbo-go, these compatible parts would be removed.