# App Configuration - 应用配置管理模块 ## 模块概述 `app_configuration` 是 OneApp 的车辆配置管理模块,专注于车辆配置选择和管理功能。该模块提供了完整的车辆配置解决方案,包括车型选择、外观配置、内饰配置、选装配置等功能。 ## 核心功能 ### 1. 车辆配置管理 - **车型配置页面**:提供完整的车辆配置选择界面 - **配置选项管理**:支持各种车辆配置选项 - **3D模型展示**:集成3D车辆模型展示功能 - **配置验证**:配置有效性验证机制 ### 2. 模块导出组件 基于真实项目代码的主要导出: ```dart library app_configuration; // 车辆配置页面 export 'src/app_modules/car_configuration/pages/car_configuration_page.dart'; // 车辆配置状态管理 export 'src/app_modules/car_configuration/blocs/car_configuration_bloc.dart'; // 配置相关组件 export 'src/app_modules/car_configuration/widgets/car_rights_dialog_widget.dart'; export 'src/app_modules/car_configuration/widgets/car_order_count_exception_dialog.dart'; // 路由导出 export 'src/route_export.dart'; // 配置常量 export 'src/app_modules/car_configuration/configuration_constant.dart'; ``` ### 3. 车辆配置页面 (CarConfigurationPage) 核心配置页面实现: ```dart /// 车辆配置页面 class CarConfigurationPage extends StatefulWidget with RouteObjProvider { CarConfigurationPage({ Key? key, this.carModelCode, this.smallPreOrderNum, this.carOrderNum, this.needDepositAmount, this.pageFrom = PageFrom.pageNone, }) : super(key: key); /// 已选车型配置代码 final String? carModelCode; /// 小订订单号,创建大定时可以关联小订 final String? smallPreOrderNum; /// 大定修改订单原始订单号 final String? carOrderNum; /// 大定修改,大定定金金额 final double? needDepositAmount; /// 页面来源类型 PageFrom? pageFrom = PageFrom.pageNone; @override State createState() => _CarConfigurationPageState(); } ``` ### 4. 模块架构组件 实际项目包含的配置组件: - **car_3D_model_webview.dart**: 3D车辆模型WebView组件 - **car_exterior_config.dart**: 车辆外观配置组件 - **car_interior_config.dart**: 车辆内饰配置组件 - **car_model_config_new.dart**: 新版车型配置组件 - **car_option_config.dart**: 车辆选装配置组件 - **config_bottom_bar_widget.dart**: 配置底部栏组件 - **configuration_tab.dart**: 配置选项卡组件 ## 技术架构 ### 模块注册 ```dart /// App配置模块 class AppConfigurationModule extends Module with RouteObjProvider { @override List get imports => []; @override List get binds => []; @override List get routes { final r1 = RouteCenterAPI.routeMetaBy( AppConfigurationRouteExport.keyAppConfiguration ); return [ ChildRoute( r1.path, child: (_, args) => r1.provider(args).as(), guards: loginGuardList, ), ]; } } ``` ### 目录结构 基于实际项目结构: ``` lib/ ├── app_configuration.dart # 主导出文件 ├── generated/ # 生成的国际化文件 ├── l10n/ # 国际化资源文件 └── src/ # 源代码目录 ├── app_modules/ # 应用模块 │ └── car_configuration/ # 车辆配置模块 │ ├── blocs/ # BLoC状态管理 │ ├── model/ # 数据模型 │ ├── pages/ # 页面组件 │ ├── widgets/ # 配置组件 │ └── configuration_constant.dart # 配置常量 ├── app_defines/ # 应用定义 └── route_export.dart # 路由导出 ``` ### 核心组件 #### 1. 配置管理器 (ConfigurationManager) ```dart class ConfigurationManager { // 初始化配置管理器 Future initialize(ConfigurationConfig config); // 获取配置值 T? getValue(String key, {T? defaultValue}); // 设置配置值 Future setValue(String key, T value); // 删除配置 Future removeValue(String key); // 获取所有配置 Map getAllConfigurations(); } ``` #### 2. 远程配置服务 (RemoteConfigService) ```dart class RemoteConfigService { // 从服务端获取配置 Future fetchRemoteConfig(); // 检查配置更新 Future checkForUpdates(); // 应用远程配置 Future applyRemoteConfig(Map config); // 获取配置版本信息 Future getConfigVersion(); } ``` #### 3. 本地缓存管理器 (LocalCacheManager) ```dart class LocalCacheManager { // 缓存配置到本地 Future cacheConfiguration(String key, dynamic value); // 从缓存获取配置 T? getCachedConfiguration(String key); // 清除缓存 Future clearCache([String? key]); // 获取缓存大小 Future getCacheSize(); // 压缩缓存数据 Future compressCache(); } ``` #### 4. 环境管理器 (EnvironmentManager) ```dart class EnvironmentManager { // 设置当前环境 Future setCurrentEnvironment(Environment environment); // 获取当前环境 Environment getCurrentEnvironment(); // 获取环境配置 Map getEnvironmentConfig(Environment environment); // 验证环境配置 Future validateEnvironmentConfig(Environment environment); } ``` ## 数据模型 ### 配置模型 ```dart class Configuration { final String key; final dynamic value; final ConfigurationType type; final DateTime createdAt; final DateTime updatedAt; final String version; final Map metadata; final bool isRemote; final bool isEncrypted; } enum ConfigurationType { string, integer, double, boolean, json, list } ``` ### 环境模型 ```dart enum Environment { development, testing, staging, production } class EnvironmentConfig { final Environment environment; final String baseUrl; final String apiKey; final Map headers; final int timeout; final bool enableLogging; final Map features; } ``` ### 配置版本模型 ```dart class ConfigVersion { final String version; final DateTime publishTime; final String description; final List changedKeys; final Map changeset; final bool isForced; final DateTime expireTime; } ``` ## API 接口 ### 配置管理接口 ```dart abstract class ConfigurationService { // 初始化配置服务 Future> initialize(InitConfigRequest request); // 获取配置 Future> getConfiguration(GetConfigRequest request); // 批量获取配置 Future>> getBatchConfiguration(BatchConfigRequest request); // 更新配置 Future> updateConfiguration(UpdateConfigRequest request); } ``` ### 远程配置接口 ```dart abstract class RemoteConfigurationService { // 获取远程配置 Future>> fetchRemoteConfiguration(FetchConfigRequest request); // 检查配置更新 Future> checkConfigurationUpdate(CheckUpdateRequest request); // 上报配置使用情况 Future> reportConfigurationUsage(UsageReportRequest request); } ``` ## 配置管理 ### 默认配置 ```dart class DefaultConfiguration { static const Map defaultConfig = { 'app': { 'name': 'OneApp', 'version': '1.0.0', 'debug': false, }, 'network': { 'timeout': 30000, 'retryCount': 3, 'enableCache': true, }, 'ui': { 'theme': 'auto', 'language': 'auto', 'animations': true, }, 'features': { 'enableAnalytics': true, 'enablePush': true, 'enableLocation': false, }, }; } ``` ### 环境配置 ```dart class EnvironmentConfiguration { static const Map environments = { Environment.development: EnvironmentConfig( environment: Environment.development, baseUrl: 'https://dev-api.oneapp.com', apiKey: 'dev_api_key', enableLogging: true, ), Environment.production: EnvironmentConfig( environment: Environment.production, baseUrl: 'https://api.oneapp.com', apiKey: 'prod_api_key', enableLogging: false, ), }; } ``` ## 使用示例 ### 基本配置管理 ```dart // 初始化配置管理器 final configManager = ConfigurationManager.instance; await configManager.initialize(ConfigurationConfig.defaultConfig); // 获取配置值 final appName = configManager.getValue('app.name', defaultValue: 'OneApp'); final timeout = configManager.getValue('network.timeout', defaultValue: 30000); final enableAnalytics = configManager.getValue('features.enableAnalytics', defaultValue: true); // 设置配置值 await configManager.setValue('ui.theme', 'dark'); await configManager.setValue('features.enablePush', false); // 监听配置变化 configManager.onConfigurationChanged.listen((change) { print('配置变更: ${change.key} = ${change.newValue}'); }); ``` ### 远程配置更新 ```dart // 检查远程配置更新 final remoteConfigService = RemoteConfigService.instance; final hasUpdate = await remoteConfigService.checkForUpdates(); if (hasUpdate) { // 获取远程配置 final remoteConfig = await remoteConfigService.fetchRemoteConfig(); if (remoteConfig.isSuccess) { // 应用远程配置 await remoteConfigService.applyRemoteConfig(remoteConfig.data); print('远程配置已更新'); } } // 监听远程配置更新 remoteConfigService.onRemoteConfigUpdated.listen((config) { print('收到远程配置更新'); // 处理配置更新逻辑 }); ``` ### 环境配置切换 ```dart // 获取当前环境 final currentEnv = EnvironmentManager.instance.getCurrentEnvironment(); print('当前环境: $currentEnv'); // 切换到测试环境 await EnvironmentManager.instance.setCurrentEnvironment(Environment.testing); // 获取环境配置 final envConfig = EnvironmentManager.instance.getEnvironmentConfig(Environment.testing); print('测试环境配置: $envConfig'); // 验证环境配置 final isValid = await EnvironmentManager.instance.validateEnvironmentConfig(Environment.testing); if (!isValid) { print('环境配置验证失败'); } ``` ### 配置缓存管理 ```dart // 缓存配置 final cacheManager = LocalCacheManager.instance; await cacheManager.cacheConfiguration('user_preferences', userPreferences); // 获取缓存配置 final cachedPreferences = cacheManager.getCachedConfiguration>('user_preferences'); // 获取缓存大小 final cacheSize = await cacheManager.getCacheSize(); print('缓存大小: ${cacheSize}KB'); // 清理缓存 if (cacheSize > 1024 * 1024) { // 超过1MB await cacheManager.compressCache(); } ``` ## 测试策略 ### 单元测试 ```dart group('ConfigurationManager Tests', () { test('should get and set configuration values', () async { // Given final configManager = ConfigurationManager(); await configManager.initialize(ConfigurationConfig.defaultConfig); // When await configManager.setValue('test.key', 'test_value'); final value = configManager.getValue('test.key'); // Then expect(value, 'test_value'); }); test('should return default value when key not found', () { // Given final configManager = ConfigurationManager(); // When final value = configManager.getValue('nonexistent.key', defaultValue: 'default'); // Then expect(value, 'default'); }); }); ``` ### 集成测试 ```dart group('Configuration Integration Tests', () { testWidgets('configuration update flow', (tester) async { // 1. 初始化配置 await ConfigurationManager.instance.initialize(ConfigurationConfig.defaultConfig); // 2. 模拟远程配置更新 final mockRemoteConfig = {'feature.newFeature': true}; await RemoteConfigService.instance.applyRemoteConfig(mockRemoteConfig); // 3. 验证配置已更新 final newFeatureEnabled = ConfigurationManager.instance.getValue('feature.newFeature'); expect(newFeatureEnabled, true); }); }); ``` ## 性能优化 ### 缓存策略 - **内存缓存**:热点配置内存缓存 - **磁盘缓存**:所有配置磁盘持久化 - **缓存过期**:配置缓存过期机制 - **预加载**:应用启动时预加载关键配置 ### 网络优化 - **增量同步**:只同步变化的配置项 - **压缩传输**:配置数据压缩传输 - **批量操作**:批量获取和更新配置 - **连接池**:网络连接池优化 ## 安全考虑 ### 数据安全 - **配置加密**:敏感配置加密存储 - **传输加密**:配置传输使用HTTPS - **签名验证**:配置数据签名验证 - **访问控制**:配置访问权限控制 ### 隐私保护 - **数据最小化**:只收集必要的配置数据 - **匿名化**:用户相关配置匿名化 - **数据清理**:定期清理过期配置 - **透明度**:配置使用透明化 ## 监控和诊断 ### 性能监控 - **配置使用统计**:统计配置项使用频率 - **更新性能**:监控配置更新性能 - **缓存命中率**:监控缓存命中率 - **网络性能**:监控配置网络请求性能 ### 故障诊断 - **配置验证**:配置数据有效性验证 - **更新失败恢复**:配置更新失败自动恢复 - **异常监控**:配置相关异常监控 - **健康检查**:配置服务健康检查 ## 版本历史 ### v0.2.6+8 (当前版本) - 新增配置热更新功能 - 优化缓存性能 - 支持配置分组管理 - 修复环境切换问题 ### v0.2.5 - 支持远程配置灰度发布 - 新增配置使用统计 - 优化配置同步机制 - 改进错误处理 ## 依赖关系 ### 内部依赖 - `clr_configuration`: 配置服务SDK - `basic_storage`: 本地存储服务 - `basic_network`: 网络请求服务 - `basic_error`: 错误处理框架 ### 外部依赖 - `shared_preferences`: 本地配置存储 - `dio`: HTTP客户端 - `encrypt`: 数据加密 - `rxdart`: 响应式编程 ## 总结 `app_configuration` 作为应用配置管理的核心模块,提供了完整的配置管理解决方案。通过远程配置、本地缓存、热更新和环境切换等功能,为 OneApp 提供了灵活、可靠、高效的配置管理能力,确保应用能够快速响应业务需求变化,同时保证用户体验的一致性和稳定性。