0

我正在开发一个包含 Core Data 的游戏项目,我希望代码尽可能模块化。

现在我的核心数据“层次结构”链看起来像这样:

核心数据实体 -> SaveGame 类 -> GameLogic 类 -> Receiver

SaveGame 类处理与 Core Data 相关的所有内容,例如 managedObjectContext、各种实体、​​保存和覆盖操作等。

GameLogic 类处理游戏机制并使用从 Core Data 传递的数据做一些事情,例如计算收入、当前金额、处理级别变化等。

我对这个设置不满意,但有一个原因:如果接收器(例如 HUD)从 Core Data 请求数据,那么数据必须沿着该链传递,导致很多单行代码做得很好没什么,像这样:

+(NSArray *)passCoreDataInfo
{
return [CoreDataEntity fetchCoreDataEntityInfo] // ExecuteFetchRequest
}

然后将在层次结构中较低的类中像这样使用它:

+(NSArray *)passCoreDataInfoAgain
{
return [HigherClass passCoreDataInfo]
}

直到在链条的某个地方,我的 Receiver 用它做了一些有用的事情:

(...)
NSArray *coreDataInfo = [SomeClass passCoreDataInfoYetAgain];
(...)

这可能会浪费大量内存和处理能力,但我也不想屈服于可怕的“每个人都与每个人交谈”模型。

你们能否给我一些提示,告诉我如何更好地建立层次结构并绕过相同数据的不断传递?

4

2 回答 2

0

为什么不让接收者订阅从 CoreDataEntities 发送的(通用)消息?与其说是“每个人都与每个人交谈”模型,不如说是“每个人都可以关注他们感兴趣的人的推文”模型。

于 2012-08-12T13:08:40.323 回答
0

为什么不创建一个共享实例,就像[CCDirector sharedDirector], [CCSpriteFrameCache sharedSpriteFrameCache],[CCTextureCache sharedTextureCache]等一样[SimpleAudioEngine sharedEngine]

只是命名它[CoreDataEntity sharedEntity]或其他东西:

static CoreDataEntity *instanceOfCoreDataEntity = nil;

@implementation CoreDataEntity

+ (CoreDataEntity *)sharedEntity {
    if (!instanceOfCoreDataEntity) {
        instanceOfCoreDataEntity = [[CoreDataEntity alloc] initWithSomething:@"something"];
    }
    return instanceOfCoreDataEntity;
}

....

然后你可以在任何地方使用它:

NSArray *coreDataInfo = [[CoreDataEntity sharedEntity] passCoreDataInfo];
于 2012-08-13T14:17:18.490 回答