O manual que faltava
para o desenvolvimento rápido
O guia que eu gostaria de ter quando comecei
Junte mais de 20.000 desenvolvedores aprendendo sobre o desenvolvimento rápido
Baixe sua cópia gratuita
Se você está lendo isso, então eu assumo que você é novo no Core Data. Você já deve ter ouvido falar sobre Core Data e gostaria de descobrir se é um bom ajuste para você ou para o projeto em que você está trabalhando. Se esta descrição lhe serve, então sente-se. Este tutorial de Core Data ensina tudo que você precisa saber para entender melhor o que é e não é Core Data.
- O que é Core Data
- Quais são as suas origens
- Where Does It Fit In
- Gerenciar um gráfico de objetos
- When to Use Core Data
- Como isso difere de SQLite
- SQLite
- Core Data
- Core Data Limitations
- Explorar a pilha de dados do Core Data Stack
- Modelo de objeto gerenciado
- Contexto do objeto gerenciado
- Persistent Store Coordinator
- Persistent Store
- -uma loja na memória
- Como funciona o Core Data Stack
- Num Nutshell
O que é Core Data
Desenvolvedores novos no framework muitas vezes não levam tempo para aprender o que é Core Data. Não saber o que são os Dados Centrais, torna muito difícil compreender os seus aspectos internos e externos. Eu gostaria de gastar alguns minutos explorando a natureza dos Dados Centrais e, mais importante, esclarecendo o que são e não são Dados Centrais.
Quais são as suas origens
Dados Centrais é uma estrutura desenvolvida e mantida pela Apple. Ele existe há mais de uma década e apareceu pela primeira vez no MacOS com o lançamento do MacOS Tiger em 2005. Em 2009, a empresa disponibilizou o framework no iOS com o lançamento do iOS 3.
Where Does It Fit In
Core Data é o M em MVC, a camada modelo da sua aplicação. Mesmo que os Core Data possam persistir dados em disco, a persistência de dados é na verdade um recurso opcional do framework. Core Data é antes de tudo um framework para gerenciar um objeto gráfico.
Você provavelmente já ouviu e leu sobre Core Data antes de fazer este curso. Isso significa que você já deve saber que os Dados Centrais não são um banco de dados e que ele gerencia o gráfico objeto da sua aplicação. Ambas as afirmações são verdadeiras. Mas o que elas realmente significam?
Gerenciar um gráfico de objetos
Core Data primeiro e principalmente gerencia um gráfico de objetos. Um gráfico de objetos nada mais é do que uma coleção de objetos que estão conectados uns com os outros. O framework Core Data se destaca no gerenciamento de gráficos de objetos complexos.
Cuidado de gerenciar o ciclo de vida dos objetos no gráfico de objetos e opcionalmente pode persistir o gráfico de objetos em disco. Ele também oferece uma interface poderosa para pesquisar o gráfico do objeto que ele gerencia.
But Core Data é muito mais do que isso. O framework adiciona uma série de outras características atraentes, tais como validação de entrada, versionamento de modelos de dados e acompanhamento de mudanças.
When to Use Core Data
O framework é um ajuste perfeito para uma ampla gama de aplicações, mas nem todas as aplicações devem usar Core Data. Aplicações que precisam de uma camada de modelo leve não devem usar Core Data. Existem muitas bibliotecas leves que fornecem este tipo de funcionalidade.
Se você está procurando um wrapper SQLite, então Core Data também não é o que você precisa. Para um wrapper SQLite leve e performante, eu recomendo altamente o Gus Mueller’s FMDB. Esta biblioteca robusta e madura fornece uma interface orientada a objetos para interagir com SQLite.
Core Data é uma excelente escolha se você quiser uma solução que gerencie a camada de modelo da sua aplicação.
Como isso difere de SQLite
Developers new to Core Data são frequentemente confundidos pelas diferenças entre SQLite e Core Data. Se você se pergunta se você precisa de SQLite ou Core Data, então você está fazendo a pergunta errada. Lembre-se que Core Data não é um banco de dados.
SQLite
SQLite é um banco de dados leve que é muito performante e, portanto, um bom ajuste para aplicações móveis. Embora o SQLite seja anunciado como um banco de dados relacional, é importante perceber que você, o desenvolvedor, está encarregado de manter as relações entre os registros armazenados no banco de dados.
Core Data
Core Data vai muito além. Ele fornece uma abstração que lhe permite interagir com a camada do modelo de uma maneira orientada a objetos. Cada registro com o qual você interage é um objeto. O Core Data é responsável pela integridade do gráfico do objeto. Ele garante que o objeto gráfico seja mantido atualizado.
Core Data Limitations
Even, embora Core Data seja um framework fantástico, há vários inconvenientes. Estes inconvenientes estão diretamente relacionados com a natureza do framework e como ele funciona.
Core Data só pode fazer sua mágica porque mantém o objeto gráfico que ele gerencia na memória. Isto significa que ele só pode operar em registros uma vez que eles estejam na memória. Isto é muito diferente de realizar uma consulta SQL em um banco de dados. Se você quiser apagar milhares de registros, o Core Data precisa primeiro carregar cada registro na memória. Escusado será dizer que isto resulta em problemas de memória e desempenho se feito incorretamente.
Outra limitação importante é o modelo de threading dos Dados Centrais. O framework espera ser executado em uma única thread. Felizmente, o Core Data evoluiu dramaticamente ao longo dos anos e o framework colocou várias soluções para tornar o trabalho com Core Data em um ambiente multithreaded mais seguro e fácil.
Para aplicações que precisam gerenciar um gráfico de objetos complexos, o Core Data é um ótimo ajuste. Se você só precisa armazenar um punhado de objetos não relacionados, então você pode estar melhor com uma solução leve ou com o sistema padrão do usuário.
Explorar a pilha de dados do Core Data Stack
Agora que você saiba o que são e o que não são dados do Core, é hora de fazer zoom nos blocos de construção do framework. É essencial que você entenda como as várias classes que fazem o framework funcionar juntas.
As estrelas do framework são:
- o modelo de objeto gerenciado
- o contexto de objeto gerenciado
- e o coordenador persistente da loja
Este diagrama mostra como estas classes se relacionam umas com as outras. Vamos começar com o modelo de objeto gerenciado.
Modelo de objeto gerenciado
O modelo de objeto gerenciado é uma instância da classe NSManagedObjectModel
. Enquanto uma típica aplicação Core Data tem uma instância da classe NSManagedObjectModel
, é possível ter múltiplos. A instância do modelo de objeto gerenciado representa o modelo de dados da aplicação Dados Centrais.
O diagrama acima mostra que o modelo de objeto gerenciado está conectado ao modelo de dados. O modelo de dados é representado por um arquivo no pacote de aplicações que contém o esquema de dados da aplicação. O esquema de dados nada mais é do que um conjunto de entidades.
Uma entidade pode ter atributos e relações, que compõem o modelo de dados da aplicação. Lembre-se por enquanto que o modelo de objeto gerenciado uma instância é da classe NSManagedObjectModel
e que ela representa o modelo de dados da aplicação de Dados Básicos.
Contexto do objeto gerenciado
Um contexto de objeto gerenciado é representado por uma instância da classe NSManagedObjectContext
. Uma aplicação de Dados Básicos tem um ou mais contextos de objetos gerenciados, cada um gerenciando uma coleção de objetos modelo, instâncias da classe NSManagedObject
classe.
O diagrama que exploramos anteriormente ilustra que o contexto de objeto gerenciado recebe objetos modelo através de um coordenador de loja persistente. Ele mantém uma referência ao coordenador de loja persistente da aplicação.
O contexto de objeto gerenciado é o objeto com o qual você interage mais. Ele cria, lê, atualiza e elimina objetos-modelo. Da perspectiva de um desenvolvedor, a classe NSManagedObjectContext
é o cavalo de batalha do framework Core Data.
Persistent Store Coordinator
The persistent store coordinator is represented by an instance of the NSPersistentStoreCoordinator
class and it plays a key role in every Core Data application. Embora seja possível ter vários coordenadores de loja persistentes, a maioria das aplicações tem apenas um. Muito, muito raramente há a necessidade de ter múltiplos coordenadores de loja persistentes em uma aplicação.
O coordenador de loja persistente mantém uma referência para o modelo de objeto gerenciado e cada contexto de objeto gerenciado pai mantém uma referência para o coordenador de loja persistente. Não se preocupe com os contextos de objetos gerenciados pelos pais e filhos por enquanto.
O diagrama acima nos mostra que um coordenador de loja persistente está conectado a uma ou mais lojas persistentes. Isto nos leva à loja persistente.
Persistent Store
Lembrar que o Core Data gerencia um gráfico de objetos. O framework só é útil se o coordenador da loja persistente estiver conectado a uma ou mais lojas persistentes. Fora da caixa, Core Data suporta três tipos de lojas persistentes:
- a banco de dados SQLite
- a loja binária
-uma loja na memória
Cada tipo de loja persistente tem seus prós e contras. A maioria das aplicações usa um banco de dados SQLite como sua loja persistente. Como mencionei anteriormente, o SQLite é leve e muito rápido. É ótimo para aplicações móveis e desktop.
Como funciona o Core Data Stack
Agora que você saiba em que consiste o Core Data Stack, é hora de explorar como ele funciona em uma aplicação. O coração de uma aplicação de Dados Centrais é o coordenador persistente da loja. O coordenador da loja persistente é instanciado primeiro quando a pilha de dados do núcleo é criada.
Mas para criar o coordenador da loja persistente, precisamos de um modelo de objeto gerenciado. Por que isso acontece? O coordenador da loja persistente precisa saber como é o esquema de dados da aplicação.
Após a criação do coordenador da loja persistente e do modelo de objeto gerenciado, o cavalo de trabalho da pilha de dados básicos é inicializado, o contexto do objeto gerenciado. Lembre-se que um contexto de objeto gerenciado mantém uma referência ao coordenador da loja persistente.
Com a pilha de dados do Core Data stack configurada, a aplicação está pronta para usar os dados do Core Data para interagir com a loja persistente da aplicação. Na maioria dos casos, sua aplicação interage com o coordenador da loja persistente através do contexto do objeto gerenciado.
Raramente, se alguma vez, você irá interagir diretamente com o coordenador da loja persistente ou com o modelo de objeto gerenciado. Como mencionei anteriormente, a classe NSManagedObjectContext
é a classe com a qual você interage mais frequentemente.
O contexto do objeto gerenciado é usado para criar, ler, atualizar e excluir registros. Quando as modificações feitas no contexto do objeto administrado são gravadas, o contexto do objeto administrado as empurra para o coordenador da loja persistente, que envia as modificações para a loja persistente correspondente.
Se a sua aplicação tem várias lojas persistentes, o coordenador da loja persistente calcula qual loja persistente precisa armazenar as alterações do contexto do objeto administrado.
Num Nutshell
Você agora conhece os fundamentos da estrutura de dados básicos. Você já está à frente da curva porque a maioria dos desenvolvedores saltam este passo. O próximo passo que você precisa dar é começar a usar o framework. Se você precisar de ajuda, eu recomendo checar o Mastering Core Data With Swift.
O Manual que Faltava
para o Swift Development
O Guia que eu gostaria de ter quando eu comecei
Join 20.000+ Desenvolvedores aprendendo sobre o Swift Development
Baixe sua cópia gratuita