GameFramework摘录 - 3. 使用interface定义对外接口
GameFramework的模块密封性相当好,如果使用unity的assemblydef,其设计可以把框架项目与自己的游戏逻辑分离开来。
除一些常用的基类、枚举等,核心模块设置为internal
权限,密封在框架项目中。
在游戏逻辑需求时,通过入口类GameFrameworkEntry
获取
其对外接口由interface定义,如EventManager
的实现:
namespace GameFramework.Event
{
public internal IEventManager
{
int EventHandlerCount
{
get;
}
int EventCount
{
get;
}
// ...
}
internal sealed class EventManager : GameFrameworkModule, IEventManager
{
// ...
}
}
接口IEventManager
实际在整个框架内只用了一次,并没有起到interface通常的“抽象”功能,而是作为从外部到框架模块的入口。
public static class GameFrameworkEntry
{
public static T GetModule<T>() where T : class
{
Type interfaceType = typeof(T);
if (!interfaceType.IsInterface)
{
throw new GameFrameworkException("...");
}
if (!interfaceType.FullName.StartsWith("GameFramework."))
{
throw new GameFrameworkException("...");
}
string moduleName = string.Format("{0}.{1}", interfaceType.Namespace, interfaceType.Name.Substring(1));
Type moduleType = Type.GetType(moduleName);
if (moduleType == null)
{
throw new GameFrameworkException("...");
}
return GetModule(moduleType) as T;
}
}
可以看出, GameFramework.Event.IEventManager
只是GameFramework.Event.EventManager
的对外接口
在使用框架时
IEventManager mgr = GameFrameworkEntry.GetModule<GameFramework.Event.IEventManager>();
Console.WriteLine(mgr.EventHandlerCount);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构