您的位置:首页 > 移动开发

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

2017-03-19 16:10 288 查看
赛高文字是我在上一家公司做的一个 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,通过以上方法可以避免这一过程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息