OCFeatureFlagManager and OCFeatureFlagSyncManager
Overview
The OCFeatureFlagManager
and OCFeatureFlagSyncManager
are components designed to manage and synchronize feature flags in your application. Feature flags allow you to enable or disable specific functionality dynamically, making it easier to roll out new features, perform A/B testing, or toggle features based on user or environment conditions.
- OCFeatureFlagManager: Handles local storage, overrides, and persistence of feature flags.
- OCFeatureFlagSyncManager: Synchronizes feature flags with a remote API, ensuring your application stays up-to-date with the latest feature flag configurations.
OCFeatureFlagManager
Description
The OCFeatureFlagManager
is responsible for managing feature flags locally. It provides functionality to save, load, override, and reset feature flags, as well as retrieve their effective values.
Key Features
- Persistence: Save and load feature flags using local storage.
- Overrides: Temporarily override feature flag values.
- Effective Values: Automatically prioritize override values over default values.
Usage
Saving Feature Flags
ocFeatureFlagManager.saveFeatureFlags(flags, etag: "etag123")
Loading Feature Flags
ocFeatureFlagManager.loadFeatureFlags()
Overriding a Feature Flag
ocFeatureFlagManager.overrideFeatureFlag("featureFlagKey", withValue: true)
Resetting Overrides
ocFeatureFlagManager.resetOverrides()
Retrieving a Feature Flag Value
ocFeatureFlagManager.getValue("featureFlagKey")
OCFeatureFlagSyncManager
Description
The OCFeatureFlagSyncManager
is responsible for synchronizing feature flags with a remote API. It ensures that your application has the latest feature flag configurations by fetching them from a server.
Key Features
- Remote Synchronization: Fetch and update feature flags from a remote API.
- ETag Support: Use ETags to optimize network requests and avoid unnecessary updates.
Usage
Synchronizing Feature Flags
private val ocFeatureFlagSyncManager = OCFeatureFlagSyncManager(
featureFlagManager = ocFeatureFlagManager,
networkClient = ocNetworkManager,
)
ocFeatureFlagSyncManager.synchronize {
endpointUrl = FEATURE_FLAG_ENDPOINT
type = OCHttpMethod.GET
queryParameters[QUERY_AOK] = selectedAokId
retryCount = retryCountForFeatureFlagRequest
}
Dependencies
OCFeatureFlagManager
- Key-Value Storage: Uses
OCConfigurationManager
for local persistence. - Feature Flag Model: Relies on
OCFeatureFlag
to represent individual feature flags.
OCFeatureFlagSyncManager
- Network Manager: Uses
OCNetworkManager
for API requests. - Request Model: Uses
OCRequestable
to define API request parameters.
Example Workflow
-
Save Feature Flags Locally:
ocFeatureFlagManager.saveFeatureFlags(flags, etag: "etag123")
-
Synchronize with Remote API:
private val ocFeatureFlagSyncManager = OCFeatureFlagSyncManager(
featureFlagManager = ocFeatureFlagManager,
networkClient = ocNetworkManager,
)
ocFeatureFlagSyncManager.synchronize {
endpointUrl = FEATURE_FLAG_ENDPOINT
type = OCHttpMethod.GET
queryParameters[QUERY_AOK] = selectedAokId
retryCount = retryCountForFeatureFlagRequest
} -
Override a Feature Flag:
OCFeatureFlagManager.shared.overrideFeatureFlag("featureFlagKey", withValue: true)
-
Retrieve Effective Value:
val value = ocFeatureFlagManager.getValue("featureFlagKey")
-
Reset Overrides:
ocFeatureFlagManager.resetOverrides()
Key Classes and Structs
OCFeatureFlagManager
Manages feature flags locally, including saving, loading, overriding, and resetting.
OCFeatureFlagSyncManager
Synchronizes feature flags with a remote API.
OCFeatureFlag
Represents a feature flag with its default value and optional override value.
Conclusion
The OCFeatureFlagManager
and OCFeatureFlagSyncManager
provide a robust solution for managing and synchronizing feature flags in your application. By leveraging these components, you can dynamically control application behavior, roll out features safely, and optimize user experiences.