2010-08-02 11 views
11

Esta es una pregunta más filosófica sobre las decisiones de diseño de Apple que una pregunta sobre los Datos centrales.¿Por qué Core Data es tan difícil de prepoblar?

¿Por qué en el mundo es útil tener un sistema modelo que es tan difícil de prepoblar? ¿Cuáles son las ventajas? Sé que puede hacer que su programa genere el archivo sqlite y lo edite manualmente, pero hasta donde sé, no puede hacer eso si tiene alguna relación.

Lo comparo con el paradigma MVC utilizado en los rieles, que parece tener más sentido. Los modelos en rieles proporcionan un nivel similar de abstracción a los datos básicos (por lo que puedo decir), pero también te permiten ingresar lo que quieras en tu base de datos manualmente (o mediante un guión).

El problema que tengo con Core Data es que: como los rieles parecen probar (para mí) que puede tener una excelente abstracción de modelo de la base de datos conservando varios métodos convenientes para rellenarla, ¿qué ventajas tiene eliminar esa habilidad? ¿oferta? ¿Es Core Data de alguna manera más eficiente? ¿La dificultad de la prepoblación es simplemente un efecto secundario de otras opciones de diseño y, de ser así, por qué no se tuvo en cuenta la prepoblación?

(Una advertencia de que estoy realmente interesado en el razonamiento detrás de estas opciones, y aunque mi puesto podría sugerir que, no estoy realmente en busca de un "Modelos de rieles vs. datos básicos" debate.)

Respuesta

11

Dado que Core Data es NOT una base de datos. Es un gráfico de objetos que persiste en el disco y uno de esos formatos de persistencia es una base de datos. Esto significa que debe mirarlo en un PoV inverso.

Core Data está diseñado para ser lo más rápido posible al recuperar objetos de esa tienda persistente y guardarlos de nuevo. Un efecto colateral de esto es que el formato persistente se enfoca en hacer ese objetivo más rápido y ser compatible con cualquier otra cosa es secundario en el mejor de los casos. Por lo tanto, la estructura interna del archivo SQLite está orientada al rendimiento, no a la compatibilidad.

Mi opinión sobre la prepoblación es que Core Data está diseñado como un sistema de circuito cerrado. Puede usar Core Data para completar el archivo de datos fácilmente. No es más difícil rellenar un archivo Core Data SQLite que escribir una secuencia de comandos para traducir sus datos Oracle a formato CSV.

Si te quedas dentro de Cocoa y Core Data entonces no es difícil en absoluto. Usted escribe una aplicación de línea de comando o una aplicación de edición e importa los datos. Desde el PoV de un programador de Cocoa, esa es una tarea trivial que solo lleva unos minutos.

+0

Parece una base de datos ("una colección organizada de datos para uno o más usos, generalmente en forma digital") para mí. En cualquier caso, ninguna de sus preguntas parecía estar basada en lo que usted llama Datos Básicos. Lo llamó un "sistema modelo" al principio. – Ken

+2

Incluso en el "sistema de circuito cerrado" que es Core Data, la prepoblación es una tarea común. ¿Por qué crear este sistema sin una herramienta para hacerlo? O si Apple no quiere hacerlo por sí mismo, ¿por qué específicamente tener una cláusula en su acuerdo de licencia que prohíbe la ingeniería inversa de su esquema de datos centrales para que alguna persona emprendedora pueda escribir esa herramienta ellos mismos? –

+2

@Evan Cordell - Apple no creó una herramienta para la prepoblación en parte porque es muy fácil hacerlo usted mismo. Vea mis respuestas aquí: http://stackoverflow.com/questions/2248363/portability-of-core-datas-sqlite-file-between-os-x-and-iphone-os/2248463#2248463 y aquí: http://stackoverflow.com/questions/1264382/how-do-i-initialize-a-store-with-default-data-in-a-coredata-application/1266588#1266588. Incluso muestro cómo hacerlo en ~ 15 minutos en el video de mi curso de iPhone en iTunes U: http://deimos.apple.com/WebObjects/Core.woa/Browse/matcmadison.edu.3989485784.03989485786 –

Cuestiones relacionadas