mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 10:34:30 +08:00
refactor(setting): 重构设置系统的接口设计
- 移除 SettingsModel 中的 All() 方法,避免同时实现两个接口的设置被重复返回 - 添加 AllApplicators() 方法用于获取所有可应用设置 - 添加 AllData() 方法用于获取所有设置数据 - 修改 SettingsSystem.ApplyAll() 方法,直接遍历可应用设置而非设置节 - 更新 ISettingsModel 接口定义,将 All() 方法拆分为 AllData() 和 AllApplicators() - 移除 SettingsSystem 中的 Apply(Type) 和 Apply(IEnumerable<Type>) 重载方法 - 更新 Apply<T>() 泛型约束从 ISettingsSection 改为 IApplyAbleSettings - 移除注册时对 ISettingsData 的自动注册逻辑,保持职责分离
This commit is contained in:
parent
19c0830a7d
commit
07f5d27ab3
@ -30,10 +30,17 @@ public interface ISettingsModel : IModel
|
||||
T? GetApplicator<T>() where T : class, IApplyAbleSettings;
|
||||
|
||||
/// <summary>
|
||||
/// 获取所有设置节的集合
|
||||
/// 获取所有设置数据的集合
|
||||
/// </summary>
|
||||
/// <returns>包含所有设置节的可枚举集合</returns>
|
||||
IEnumerable<ISettingsSection> All();
|
||||
/// <returns>包含所有设置数据的可枚举集合</returns>
|
||||
IEnumerable<ISettingsData> AllData();
|
||||
|
||||
/// <summary>
|
||||
/// 获取所有可应用设置的集合
|
||||
/// </summary>
|
||||
/// <returns>包含所有可应用设置的可枚举集合</returns>
|
||||
IEnumerable<IApplyAbleSettings> AllApplicators();
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 注册可应用设置(必须手动注册)
|
||||
|
||||
@ -12,18 +12,8 @@ public interface ISettingsSystem : ISystem
|
||||
/// </summary>
|
||||
Task ApplyAll();
|
||||
|
||||
/// <summary>
|
||||
/// 应用指定类型的设置
|
||||
/// </summary>
|
||||
Task Apply(Type settingsType);
|
||||
|
||||
/// <summary>
|
||||
/// 应用指定类型的设置(泛型版本)
|
||||
/// </summary>
|
||||
Task Apply<T>() where T : class, ISettingsSection;
|
||||
|
||||
/// <summary>
|
||||
/// 批量应用多个设置类型
|
||||
/// </summary>
|
||||
Task Apply(IEnumerable<Type> settingsTypes);
|
||||
Task Apply<T>() where T : class, IApplyAbleSettings;
|
||||
}
|
||||
@ -32,6 +32,15 @@ public class SettingsModel : AbstractModel, ISettingsModel
|
||||
return created;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取所有已注册的可应用设置
|
||||
/// </summary>
|
||||
/// <returns>所有可应用设置的枚举集合</returns>
|
||||
public IEnumerable<IApplyAbleSettings> AllApplicators()
|
||||
{
|
||||
return _applicators.Values;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 注册可应用设置(必须手动注册)
|
||||
/// </summary>
|
||||
@ -42,13 +51,6 @@ public class SettingsModel : AbstractModel, ISettingsModel
|
||||
{
|
||||
var type = typeof(T);
|
||||
_applicators[type] = applicator;
|
||||
|
||||
// 如果这个应用设置同时也是数据设置,也注册到数据字典中
|
||||
if (applicator is ISettingsData data)
|
||||
{
|
||||
_dataSettings[type] = data;
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -65,6 +67,15 @@ public class SettingsModel : AbstractModel, ISettingsModel
|
||||
: null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取所有设置数据
|
||||
/// </summary>
|
||||
/// <returns>所有设置数据的枚举集合</returns>
|
||||
public IEnumerable<ISettingsData> AllData()
|
||||
{
|
||||
return _dataSettings.Values;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 尝试获取指定类型的设置节
|
||||
/// </summary>
|
||||
@ -91,27 +102,11 @@ public class SettingsModel : AbstractModel, ISettingsModel
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取所有设置节的集合
|
||||
/// </summary>
|
||||
/// <returns>包含所有设置节的可枚举集合</returns>
|
||||
public IEnumerable<ISettingsSection> All()
|
||||
{
|
||||
// 使用 HashSet 去重(避免同时实现两个接口的设置被重复返回)
|
||||
var sections = new HashSet<ISettingsSection>();
|
||||
|
||||
foreach (var applicator in _applicators.Values)
|
||||
sections.Add(applicator);
|
||||
|
||||
foreach (var data in _dataSettings.Values)
|
||||
sections.Add(data);
|
||||
|
||||
return sections;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化并加载指定类型的设置数据
|
||||
/// </summary>
|
||||
/// <param name="settingTypes">要初始化的设置类型数组</param>
|
||||
public async Task InitializeAsync(params Type[] settingTypes)
|
||||
{
|
||||
foreach (var type in settingTypes)
|
||||
|
||||
@ -18,8 +18,10 @@ public class SettingsSystem : AbstractSystem, ISettingsSystem
|
||||
/// <returns>完成的任务</returns>
|
||||
public async Task ApplyAll()
|
||||
{
|
||||
// 遍历所有设置配置并尝试应用
|
||||
foreach (var section in _model.All()) await TryApplyAsync(section);
|
||||
foreach (var applicator in _model.AllApplicators())
|
||||
{
|
||||
await TryApplyAsync(applicator);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -27,40 +29,14 @@ public class SettingsSystem : AbstractSystem, ISettingsSystem
|
||||
/// </summary>
|
||||
/// <typeparam name="T">设置配置类型,必须是类且实现ISettingsSection接口</typeparam>
|
||||
/// <returns>完成的任务</returns>
|
||||
public Task Apply<T>() where T : class, ISettingsSection
|
||||
public Task Apply<T>() where T : class, IApplyAbleSettings
|
||||
{
|
||||
return Apply(typeof(T));
|
||||
var applicator = _model.GetApplicator<T>();
|
||||
return applicator != null
|
||||
? TryApplyAsync(applicator)
|
||||
: Task.CompletedTask;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 应用指定类型的设置配置
|
||||
/// </summary>
|
||||
/// <param name="settingsType">设置配置类型</param>
|
||||
/// <returns>完成的任务</returns>
|
||||
public async Task Apply(Type settingsType)
|
||||
{
|
||||
if (_model.TryGet(settingsType, out var section))
|
||||
{
|
||||
await TryApplyAsync(section);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 应用指定类型集合的设置配置
|
||||
/// </summary>
|
||||
/// <param name="settingsTypes">设置配置类型集合</param>
|
||||
/// <returns>完成的任务</returns>
|
||||
public async Task Apply(IEnumerable<Type> settingsTypes)
|
||||
{
|
||||
// 去重后遍历设置类型,获取并应用对应的设置配置
|
||||
foreach (var type in settingsTypes.Distinct())
|
||||
{
|
||||
if (_model.TryGet(type, out var section))
|
||||
{
|
||||
await TryApplyAsync(section);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化设置系统,获取设置模型实例
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user