Skip to content

Game 抽象层

GFramework.Game.AbstractionsGame 运行时的契约包。

它建立在 GFramework.Core.Abstractions 之上,负责定义配置、数据、设置、场景、UI、路由、存储和资源注册表相关的接口、 枚举与事件契约;默认实现、路由基类、YAML 加载器、文件存储和设置 / 存档仓库则在 GFramework.Game 中。

如果你要开箱即用地接入游戏运行时能力,应依赖 GFramework.Game;如果你在做共享业务层、feature 包、测试替身或引擎适配层, 才单独消费本包。

什么时候单独依赖它

  • 你希望公共业务层只依赖 ISceneRouterIUiRouterISettingsSystemISaveRepository<TSaveData> 这类契约
  • 你要让多个程序集共享 ISettingsDataIDataISceneEnterParamIUiPageEnterParam 等数据和路由上下文
  • 你需要自己实现 factory、root、存储或配置加载器,但不想把默认运行时一起带进来

包关系

  • 契约层:GFramework.Game.Abstractions
  • 运行时实现:GFramework.Game
  • 底层基础契约:GFramework.Core.Abstractions

配置契约的采用边界

如果你只依赖 GFramework.Game.Abstractions,需要额外记住一件事:这里的 Config/ 只定义“如何注册与访问配置表”的读取契约,不定义 AI-First 配置工作流的完整实现边界。

与配置相关的实际采用路径仍然要回到 GFramework.Game

  • YamlConfigLoaderGameConfigBootstrapGameConfigModule 等实现都在 GFramework.Game
  • GFramework.Game.SourceGenerators 生成的配置类型,服务的是与 Runtime 对齐的共享 schema 子集
  • 共享子集之外的复杂 schema 设计,不会因为你只依赖 abstractions 就自动获得额外支持

这意味着,如果你的 schema 依赖下面这些能力,就不能只停留在 abstractions 视角理解配置契约:

  • oneOfanyOf 这类复杂组合关键字
  • falseadditionalProperties
  • 其他会引入开放对象形状、联合分支或属性合并漂移的 schema 设计

这些边界由 GFramework.Game配置系统 负责说明和落地;GFramework.Game.Abstractions 本身不重新定义它们。

契约地图

契约族作用
Config/IConfigLoaderIConfigRegistryIConfigTable<TKey, TValue> 和配置失败诊断模型
Data/IDataIVersionedDataIDataRepositoryISettingsDataRepositoryISaveRepository<TSaveData> 及数据事件
Setting/ISettingsDataISettingsModelISettingsSystem、设置迁移契约与内置设置数据类型
Scene/ISceneISceneRouterISceneFactoryISceneRoot、转场处理器与事件
UI/IUiPageIUiRouterIUiFactoryIUiRoot、交互配置与 UI 转场选项
Routing/IRouteIRouteContextIRouteGuard<TRoute>,作为 Scene / UI 共享的路由基础约定
Storage/ Asset/ Enums/文件存储角色、资源注册表,以及转场 / UI 层级 / 输入动作等跨层枚举

契约族阅读入口

如果你要回到源码 XML 文档确认契约,请优先看下面这些族群:

契约族代表类型建议先确认什么
Config/IConfigLoaderIConfigRegistryIConfigTable<TKey, TValue>ConfigLoadException配置表注册、只读访问和失败诊断边界
Data/IDataRepositoryISettingsDataRepositoryISaveRepository<TSaveData>DataRepositoryOptions业务数据、统一设置文件、槽位存档与迁移契约
Setting/ISettingsDataISettingsModelISettingsSystemLocalizationSettings设置生命周期、应用语义、迁移接口和内置设置对象
Scene/ISceneISceneRouterISceneFactorySceneTransitionEvent场景行为、工厂 / root 边界和转场模型
UI/IUiPageIUiRouterIUiFactoryUiInteractionProfileUiTransitionHandlerOptions页面栈、层级 UI、输入动作和 UI 转场契约
Routing/ Storage/ Asset/ Enums/IRouteIRouteContextIFileStorageIAssetRegistry<T>UiLayerSceneTransitionType公共路由上下文、存储角色、资源注册表与共享枚举

最小接入路径

1. 只在公共业务层声明游戏对象

csharp
using GFramework.Game.Abstractions.Data;
using GFramework.Game.Abstractions.Scene;
using GFramework.Game.Abstractions.UI;

public sealed class GameSaveData : IVersionedData
{
    public int Version { get; set; } = 1;
    public DateTime LastModified { get; set; } = DateTime.UtcNow;
}

public sealed class GameplayEnterParam : ISceneEnterParam
{
    public required string Seed { get; init; }
}

public sealed class PauseMenuParam : IUiPageEnterParam
{
    public bool AllowRestart { get; init; }
}

2. 让 feature 包只依赖抽象

csharp
using GFramework.Game.Abstractions.Data;
using GFramework.Game.Abstractions.Scene;

public sealed class ContinueGameCommandHandler
{
    private readonly ISaveRepository<GameSaveData> _saveRepository;
    private readonly ISceneRouter _sceneRouter;

    public ContinueGameCommandHandler(
        ISaveRepository<GameSaveData> saveRepository,
        ISceneRouter sceneRouter)
    {
        _saveRepository = saveRepository;
        _sceneRouter = sceneRouter;
    }
}

3. 什么时候切到运行时包

下面这些需求都属于 GFramework.Game 的职责,而不是本包:

  • 使用默认的 JsonSerializerFileStorageScopedStorage
  • 使用 SettingsModel<TRepository>SettingsSystemSaveRepository<TSaveData> 等默认实现
  • 使用 YamlConfigLoaderGameConfigBootstrapGameConfigModule
  • 继承 SceneRouterBaseUiRouterBase 或默认转场处理器基类
  • 需要确认 AI-First 配置工作流当前支持的共享 schema 子集,以及 oneOf / anyOf、非 false additionalProperties 等不在采用路径内的边界

阅读顺序

  1. 先读本页,确认你是否真的只需要契约层
  2. 再看 Game 模块总览 了解默认运行时怎么组织这些契约
  3. 继续读具体专题页:
  4. 需要统一入口时,回到:

如果你的关注点是配置契约,请把 配置系统 当作下一跳,而不是停留在 abstractions 页面对支持边界做推断。

基于 Apache 2.0 许可证发布