Skip to main content
Version: Next

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

  1. Save Feature Flags Locally:

     ocFeatureFlagManager.saveFeatureFlags(flags, etag: "etag123")
  2. 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
    }
  3. Override a Feature Flag:

     OCFeatureFlagManager.shared.overrideFeatureFlag("featureFlagKey", withValue: true)
  4. Retrieve Effective Value:

    val value = ocFeatureFlagManager.getValue("featureFlagKey")
  5. 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.