spring-cloud / spring-cloud-config

External configuration (server and client) for Spring Cloud
Apache License 2.0
1.94k stars 1.28k forks source link

[Refactoring] Introduce RequestContext to easily pass new parameters to downstream methods #2407

Open opeco17 opened 2 months ago

opeco17 commented 2 months ago

Is your feature request related to a problem? Please describe. In the current implementation, it's necessary to change a bunch of method signatures when we introduce new HTTP parameters and pass them to downstream methods.

Let's say you introduce the new parameter forceRefresh like #2402. In this case, you need to change the signature of EnvironmentRepository and SearchPathLocator and modify a lot of classes that implement those interfaces.

Before introducing forceRefresh

public interface EnvironmentRepository {
    Environment findOne(String application, String profile, String label);
        Environment findOne(String application, String profile, String label, boolean includeOrigin);
}

public interface SearchPathLocator {
    Locations getLocations(String application, String profile, String label);
}

After introducing forceRefresh

public interface EnvironmentRepository {
    Environment findOne(String application, String profile, String label);
        Environment findOne(String application, String profile, String label, boolean includeOrigin);
        Environment findOne(String application, String profile, String label, boolean includeOrigin, boolean forceRefresh);
}

public interface SearchPathLocator {
    Locations getLocations(String application, String profile, String label);
        Locations getLocations(String application, String profile, String label, boolean forceRefresh);
}

Describe the solution you'd like Introduce RequestContext and change the interface of EnvironmentRepository and SearchPathLocator like below.

public interface EnvironmentRepository {
    Environment findOne(RequestContext ctx);
}

public interface SearchPathLocator {
    Locations getLocations(RequestContext ctx);
}

When you introduce new HTTP parameters, you can just change RequestContext and don't need to change a bunch of method signatures like the current implementation.