iphone - Objeto NSDictionary vs. personalizado
objective-c ios (3)
Por lo general, tengo un conjunto de modelos de dominio, que se adaptan mejor al enfoque MVC del desarrollo del iPhone. Tener objetos específicos también le permite hacer que la seguridad de tipos sea mucho más fácil y también reduce la complejidad a largo plazo. Si tiene NSDictionaries que contienen NSArrays y más NSDictionaries, etc., para representar su gráfico de objetos, puede volverse inmanejable muy rápidamente.
La pregunta es bastante simple: cuando creo una nueva API o clase de servicio, debo crear una clase personalizada para los objetos que se están transmitiendo o simplemente debo atenerme a un NSDictionary
que simplemente guarda los datos en un formato de estilo clave-valor. .
Obviamente, hay ventajas y desventajas, pero ¿dónde creen que está el umbral de usar una sobre la otra?
NSDictionary
:
+
Sin dependencias
+
Muy flexible
+
uso común
+
Compatibilidad NSCoding
para NSCoding
-
Estructura no definida -> Errores de tiempo de ejecución
Un objeto personalizado:
+
Estructura definida
+
Accessors de estilo de propiedad: myObject.someProperty
-
Puede resultar en un rel. gran número de clases para objetos anidados
Actualización : Comentarios incluidos de jbat100
Realmente depende de cuánto esperas que cambie tu modelo de datos. Tratar con los cambios una vez que tenga un modelo de datos basado en clases personalizadas puede ser complicado, especialmente cuando tiene archivos (cosas de codificación NSC) con diferentes versiones del modelo (en versiones ya enviadas de su aplicación), debe tener mucho cuidado para garantizar la compatibilidad con versiones anteriores. Evita sorpresas desagradables. En ese sentido, los modelos basados en NSDictionary son, como usted dice, más flexibles. Sin embargo, no permiten todas las comprobaciones y comportamientos personalizados que las clases personalizadas. Además, las clases personalizadas hacen que el modelo de datos sea más explícito para los programadores que no están familiarizados con el código, según mi experiencia, los desarrolladores a menudo se vuelven descuidados (especialmente cuando no tienen experiencia) cuando se trata de modelos basados en NSDictionary que pueden resultar rápidamente en un lío incomprensible, por lo que si baja eso Recorrer, documentar bien y ser disciplinado!
Si necesita acceso de solo lectura y no necesita métodos, puede hacer lo siguiente:
@interface NSDictionary (MyClassCategory)
-(NSString*) someField;
@end
@implementation NSDictionary (MyClassCategory)
-(NSString*) someField {
return [self objectForKey:@"someField"];
}
@end
typedef NSDictionary MyClass;
Y úsalo:
MyClass* myClass = ...;
NSString* value = [myClass someField];