我正在开发一个整合了核心数据的游戏项目,我想让代码尽可能模块化。
现在我的核心数据“层次结构”链看起来像这样:
核心数据实体 - > SaveGame类 - > GameLogic类 - >接收器
SaveGame类处理与Core Data相关的所有内容,例如managedObjectContext,各种实体,保存和覆盖操作等。
GameLogic课程涉及游戏机制,并使用从核心数据传递的数据做一些事情,例如计算收入,当前金额,处理级别变化等。
我对这种设置不满意,原因之一是:如果接收方(例如HUD)要求核心数据提供数据,则必须通过该链传递数据,从而产生大量单行几乎什么都没做,像这样:
+(NSArray *)passCoreDataInfo
{
return [CoreDataEntity fetchCoreDataEntityInfo] // ExecuteFetchRequest
}
然后将在层次结构中较低的类中使用,如下所示:
+(NSArray *)passCoreDataInfoAgain
{
return [HigherClass passCoreDataInfo]
}
直到链子的某个地方,我的Receiver用它做了一些有用的事情:
(...)
NSArray *coreDataInfo = [SomeClass passCoreDataInfoYetAgain];
(...)
这可能会浪费大量的内存和处理能力,但我也不想屈服于可怕的“每个人都在和每个人交谈”模式。
你们可以给我一些关于如何更好地设置层次结构的提示,并绕过这个传递相同的数据吗?
答案 0 :(得分:0)
为什么不让Receiver订阅从CoreDataEntities发送的(通用)消息?与其说是“每个人都在与每个人交谈”模式,而不是“每个人都可以关注那些他们感兴趣的人的推文”模型。
答案 1 :(得分: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];