I escribió copió-pegó un proyecto de ejemplo que oculta el contexto de las clases personalizadas del modelo: branch 10583736.
(que no es el código de producción final, sólo un ejemplo rápido, no espere que lidiar con múltiples hilos o errores extraños)
ocultar el contexto de clases personalizadas es sólo una cuestión de la definición de métodos personalizados de trata con cada situación donde normalmente solicitarás el contexto y lo usarás.
Se puede definir una clase para la capa de tienda de sin exponer el contexto:
@interface DataStore : NSObject
+ (id)shared;
- (void)saveAll;
- (NSEntityDescription *)entityNamed:(NSString *)name;
/* more custom methods ... */
- (NSManagedObject *)fetchEntity:(NSEntityDescription *)entity withPredicate:(NSPredicate *)predicate;
@end
Es mejor utilizar un ancestro común para todas las clases del modelo a medida para ahorrar algo de mecanografía. Esta clase puede ser la única que interactúa directamente con DataStore
. No tiene acceso al contexto.
@interface DataObject : NSManagedObject
+ (NSString *)entityName;
+ (NSEntityDescription *)entity;
- (void)save;
/* more custom methods ... */
@end
Finalmente clases personalizadas modelo define ningún método que debe, probablemente, aprovechando todo lo que está proporcionada por la superclase:
@interface Card : DataObject
@property (nonatomic, retain) NSString * question;
@property (nonatomic, retain) NSString * answer;
@property (nonatomic, retain) Deck *deck;
/* return a new card */
+ (Card *)card;
/* more custom methods ... */
@end
El maestro rama tiene un enfoque más habitual en el que las clases del modelo obtienen la contexto y trabajar con eso.
¿Puede explicar su problema un poco más? ¿Su problema es que no puede crear nuevos objetos gestionados fuera de la capa de repositorio, o que no puede guardar los objetos más adelante? – jrturton
El problema es que el contexto está "oculto" dentro de la capa de repositorio y no quiero filtrar eso fuera de la capa de repositorio. Quiero usar eso como un punto sólido de abstracción. – LuckyLuke
¿Sabe que cada objeto gestionado tiene un puntero al contexto del objeto gestionado? Entonces ese gato en particular está fuera de la bolsa, más o menos. – jrturton