赛高游戏引擎重构(一)Host App 扩展 TGEGameModel 的方案

本文介绍了一款名为赛高文字的游戏引擎的重构过程。为了提高扩展性和避免映射及版本迁移逻辑的问题,作者提出了在宿主应用中建立继承自TGEGameModel的新模型TDGameModel的方法,并详细阐述了具体的实现方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

赛高文字是我在上一家公司做的一个 App,其中的文字游戏都是由赛高文字游戏引擎驱动。之前找工作的时候稍微整理了一下代码,重构了一些部分,现在发出来。

背景

由于 TGEngine 最后会打包成一个 framework,源码无法修改,也不想 Host App 在扩展 TGEGameModel 时增加字段,同时也要避免扩展 TGEGameModel 时要修改对应的 TGERLMGameModel 和 Realm Bridge 的映射逻辑,更加免去了 Realm 的版本迁移逻辑。

方案

在 Host App 建立继承自 TGEGameModel 的 TDGameModel,这样可以在 TDGameModel 中扩展字段。
这里写图片描述

另外 TGEGameModel 暴露下面两个方法:
这里写图片描述

子类 TDGameModel 需要覆写这两个方法,补充自己的映射字段。代码如下:
这里写图片描述

由于 TGEGameModel 实现了 NSCoding, NSCopying, NSEqual 的模板方法,所以 TDGameModel 可以深拷贝、序列化各种。

关于如何避免 Realm 的映射和版本迁移逻辑

以前如果在 TGEGameModel 中增加字段,需要修改 TGERLMGameModel ,增加相应的字段,并在 TGERLMModelsBridge (DSL) 的

+ (TGERLMGameModel *)singleRealmGameModelFromRawModel:(TGEGameModel *)gameModel;
+ (TGEGameModel *)singleGameModelFromRealmGameModel:(TGERLMGameModel *)rlmModel;

方法中增加字段的映射,例如:

rlmGameModel.nproperty = gameModel.nproperty; 或 gameModel.nproperty = rlmGameModel.nproperty;

还需要在 TGEStorage 中增加版本迁移的逻辑:
这里写图片描述

整个过程非常繁琐,如果忘记其中一个步骤就会出错,甚至会因为版本迁移问题而 crash,通过以上方法可以避免这一过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值