Prévia do material em texto
PROGRAMAÇÃO MOBILE Camila Andrade Santos Banco de dados para dispositivos móveis Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: Diferenciar o uso de bancos de dados locais, remotos e baseados em serviços na nuvem. Reconhecer os prós e contras das diferentes opções de bancos de dados. Ilustrar o uso de um banco de dados em um app Android. Introdução Atualmente, em quase toda aplicação que se desenvolva, o armazena- mento de dados se faz necessário. Dependendo da aplicação, um arquivo de texto local pode ser o suficiente, como em sistemas embarcados. Outras aplicações podem necessitar de banco de dados mais robustos, com serviços complementares como aplicações web e mobile. Neste capítulo, você verá alguns conceitos básicos de banco de dados e as principais diferenças entre banco de dados locais, remotos e baseados em serviço na nuvem. Ao final, você poderá observar uma utilização prática de um banco de dados baseado em serviço na nuvem em uma aplicação mobile. 1 Banco de dados Com a evolução dos sistemas de informação as pessoas começaram a cada vez mais armazenar seus dados em ambientes virtuais. Para isso as apli- cações precisam persistir os dados dos usuários em algum lugar. No meio computacional, o lugar em que os dados são armazenados chama-se banco de dados. O banco de dados é uma coleção de dados persistentes, usados pelos sistemas de aplicação de uma determinada organização comercial (DATE, 2004). Desta forma, temos que, qualquer empresa precisa necessariamente manter muitos dados sobre sua operação, como por exemplo, dados sobre produtos, contas, pacientes, sobre alunos, planejamento, entre outros, de acordo com o escopo da organização. Algumas vantagens de se utilizar banco de dados para persistir dados estão listadas a seguir. Densidade: não há a necessidade de arquivos de papel, possivelmente volumosos de acordo com a aplicação. Velocidade: o computador pode obter e atualizar dados com maior rapidez que o ser humano. Atualidade: informações precisas e atualizadas estão disponíveis a qualquer momento sob consulta. Proteção: os dados podem estar mais protegidos contra perda não in- tencional e acesso ilegal. Existem disponíveis alguns modelos de bancos de dados. Atualmente os mais utilizados são os modelos relacionais e não relacionais (Figura 1). Bancos de dados baseados em modelo relacional são bancos em que basicamente os dados dos usuários são persistidos em uma estrutura de dados lógicos, sendo que tabelas de dados, exibições e índices são separados de estruturas de arma- zenamento físico. Este modelo fornece acesso a pontos de dados relacionados entre si (DATE, 2004). Como exemplo de bancos de dados relacionais temos o PostgreSQL, MySQL, SQLServer, entre outros. O banco de dados de modelo não relacional, por sua vez, é um banco em que não se utiliza esquema de tabelas; em vez disso, utiliza-se um modelo de armazenamento otimizado para os requisitos específicos do tipo de dados que está sendo armazenado (MICROSOFT, 2018). O modelo de banco de dados a ser utilizado dependerá da regra de negócio do sistema. Como exemplo de banco de dados não relacional, temos o MongoDB, Redis, Cassandra, Riak, entre outros. Banco de dados para dispositivos móveis2 Figura 1. Banco de dados relacional e não relacional. Como podemos observar na Figura 1, no modelo relacional temos uma estrutura que relaciona informações de uma tabela com a outra, e caso existis- sem mais registros de livros ou de filmes, ambos seriam registrados em suas respectivas tabelas e relacionados na tabela principal. No modelo não relacio- nal, todos os dados estão em somente uma estrutura, e caso existissem mais registros de livros ou de filmes, seriam inseridos na mesma linha. O modelo de banco de dados que se utilizará dependerá da regra de negócio do sistema. Tais bancos de dados, relacionados a espaço físico, podem ser locais, re- motos ou ainda, baseados em serviços na nuvem. Banco de dados locais pode ser entendido por um banco que está no mesmo local físico que a aplicação. Normalmente, desenvolvedores desktop, web ou mobile utilizam um banco de dados local durante o desenvolvimento de uma aplicação. Neste caso o software de banco de dados é instalado na mesma máquina em que o sistema está sendo executado. Em bancos de dados remotos, o software de banco de dados é instalado em uma máquina remota, ou seja, em uma máquina distinta da máquina em que se encontra a aplicação. Desta forma é necessário que a aplicação faça requisições a outro servidor, e que o servidor possibilite acesso externo. 3Banco de dados para dispositivos móveis Por fim, banco de dados baseados em serviço são bancos de dados pro- prietários, normalmente já com a infraestrutura configurada, ou seja, o de- senvolvedor não precisa se preocupar com esta tarefa; se consome apenas o serviço armazenando, alterando e recuperando seus dados. Esse tipo de banco de dados geralmente fornece outros serviços que podem ser facilmente integrados a uma aplicação mobile. 2 Prós e contras dos tipos de banco de dados Há no mercado diversas propostas de tipo de banco de dados que necessitamos para construir nossas aplicações. Para banco de dados tanto remoto quanto local, é necessária a utilização de sistema de gerenciamento de banco de dados (SGBD). Há a opção de SGBDs proprietários, como o SQLServer criado pela empresa Microsoft, um banco de dados relacional que possui característi- cas como: segurança, atuando com um sistema de criptografi a integrada; integridade, com recursos que impedem que sejam geradas inconsistências que inviabilizem a utilização precisa das informações; e concorrência, pois possibilita que mais de um usuário acesse a mesma tabela ao mesmo tempo. E o sistema de gerenciamento de banco de dados de código livre e gratuito, PostgresSQL. Ambos possuem base no structure query language (SQL) sendo o diferencial de ambos, e de qualquer outro sistema de gerenciamento de banco de dados, a estrutura e a forma de gerenciar os dados. Amazon Web Service é uma plataforma de serviços na nuvem que fornece soluções para armazenamento, redes e computação, em várias camadas, que pode ser totalmente gerenciada por meio de uma interface web, ou por meio de APIS e linha de comando, dependendo do serviço utilizado. Como banco de dados, o serviço da Amazon fornece o serviço Relational Database Service, um serviço de banco de dados relacional que facilita o gerenciamento de bancos de dados, tendo como principal vantagem a escalabilidade e o auto- gerenciamento. O Relational Database Service permite a criação de banco de dados utilizando os sistemas de gerenciamento de banco de dados Aurora, MySQL, MariaDB, PostgreSQL, Oracle e SQL Server. DynamoDB é um banco de dados não relacional totalmente gerenciado que fornece desempenho rápido e previsível com escalabilidade contínua, permitindo que você não se preocupe com provisionamento, instalação e configuração de hardware, replicação e correção de software e escalabilidade. Ele faz com que as cargas administrativas de operação e escalabilidade de um banco de dados distribuído sejam transferidas para o serviço em nuvem. Banco de dados para dispositivos móveis4 Outra solução robusta oferecida pela Amazon Web Service é o AppSync, uma implementação de servidor de GraphQL. GraphQL é uma maneira dife- rente de conectar os aplicativos à parte de trás de seus aplicativos. Com outras tecnologias, como REST, por exemplo, há uma necessidade de conhecer os chamados end points (MASSÉ, 2011), porém utilizando-se a abordagem do GraphQL efetua-se somente uma implementação, não sendo necessário se preocupar com mais de uma estrutura como end point. Isso é muito útil quando se tem diversos clientes que trabalham com bancos de dados diferentes. Na Figura 2, a seguir, podemos observar esta diferença. Figura 2. REST versus GraphQL. Ao lado esquerdo temos anecessidade de conhecer cada end point e de- senvolver um código específico para cada um. Caso vários clientes utilizem o sistema em bancos de dados distintos, haverá a necessidade de duplicar o código. Já à direita não, pois o GraphQL se encarrega desta tarefa. Temos ainda o Firebase, uma plataforma de desenvolvimento mobile e web da empresa Google que fornece diversos serviços que auxiliam no desenvol- vimento e no gerenciamento de aplicativos. Na web há um dashboard para auxiliar o desenvolvedor durante a implementação de suas aplicações. Na Figura 3 é possível observar a tela inicial do Firebase. Esta plataforma oferece serviços gratuitos e pagos, de acordo com a utilização. Podemos observar no menu à esquerda diversos serviços oferecidos, sendo um deles o banco de dados (database). Para criar uma conta, basta possuir uma conta no Google (Gmail). 5Banco de dados para dispositivos móveis Figura 3. Área de trabalho do Firebase. O banco de dados oferecido pelo Firebase é o Firestore, um banco de dados não relacional, flexível e escalonável, para armazenar e sincronizar dados de aplicativos de dispositivos móveis, web e servidores. Como principais recursos a Google elenca em seu site oficial, a flexibilidade no armazenamento dos dados conforme a necessidade do usuário, consultas expressivas, atualização em tempo real, e suporte off-line, ou seja, além de oferecer um banco de dados remoto, oferece também banco de dados local. A Microsoft também oferece um banco de dados baseado em serviço, denominado de Azure Cosmos DB. Inicialmente a Microsoft oferece 12 meses de uso gratuito para testes, e posteriormente assinatura paga. Pos- sibilita ainda a integração com o repositório de códigos GitHub. Para criar uma conta, basta possuir uma conta Microsoft (Outlook). Conforme exposto em seu site oficial, este banco é para aplicativos que necessitem de tempos de resposta baixos, na ordem de milissegundos, e ser expandidos de forma rápida e global. Banco de dados para dispositivos móveis6 Há também vários outros serviços disponíveis no mercado. Após obser- var alguns deles, podemos observar que a escolha de onde o banco estará, sendo local, remoto ou baseado em serviço, estará relacionada com o que sua aplicação necessita. Bancos locais normalmente são utilizados para testar o aplicativo desenvolvido, ou ainda em sistemas em que é neces- sário manter um armazenamento de dados off-line para posteriormente ser sincronizado com um banco de dados remoto ou baseado em serviço, quando o dispositivo tiver novamente acesso à internet. Aplicações mobile normalmente utilizam SQLite. Uma das maiores limitações ao se utilizar bancos de dados locais é o armazenamento, pois, utilizando um smart- phone como exemplo, o armazenamento é reduzido e dificilmente pode ser expandido. Bancos de dados remotos podem possuir maior capacidade de armazena- mento, porém ainda pode exigir uma certa mão de obra, uma vez que será necessário recursos de pessoal para manter o servidor e o banco de dados funcionando e disponíveis para os clientes. Ao se utilizar bancos de dados baseados em serviço, temos mais robustez, facilidade e segurança, uma vez que há todo um ambiente preparado para atender às necessidades de suas aplicações. 3 Android e banco de dados na prática Nesta seção exemplifi caremos um aplicativo Android com comunicação com o banco de dados no Firebase. Neste capítulo não será abordada a confi guração do servidor e da aplicação, somente a construção e ações de inserção, seleção, atualização e deleção de dados. Para a construção deste exemplo, foi utilizado como base Boyer e Mew (2016). Construiremos um aplicativo como exposto na Figura 4. 7Banco de dados para dispositivos móveis Figura 4. Aplicativo Android com Firebase. Este aplicativo exemplifica as ações de inserção (símbolo de +), exclusão (símbolo de –), atualização (símbolo de recarregar) e seleção, quando o usuário selecionar um aluno da lista. A lista apresenta dados já salvos no banco de dados no Firebase. Como estamos salvando alunos, criaremos inicialmente uma classe com o nome “Pessoa”, que conterá todos os atributos de uma pessoa. Na Figura 5 temos o código da classe Pessoa. Banco de dados para dispositivos móveis8 Figura 5. Classe Pessoa. Nesta classe temos os atributos Nome, Sobrenome, Email e id de uma pessoa. Além disso, temos os getters e setters dos atributos, e ainda sobrescre- vemos, na linha 54, o método toString, para retornar o nome concatenado ao sobrenome de uma pessoa para listarmos na tela inicial. Inseriremos as ações desta tela na classe MainActivity, que já é criada por padrão quando criamos um projeto. Esta classe estende AppCompatActivity. É necessário estender esta classe para capturar as ações do Android, caso contrário seria uma classe Java comum. Observe a Figura 6. 9Banco de dados para dispositivos móveis Figura 6. Classe MainActivity e declaração de variáveis. Podemos observar na linha 23 extensão da classe AppCompatActivity. Nas linhas 25 e 26, declaramos nossas variáveis que receberão os componentes criados na tela, além do objeto pessoaSelecionada, que receberá a pessoa selecionada na lista. Ao estender a classe AppCompatActivity alguns métodos devem ser sobrescritos por padrão, como por exemplo, o onCreate, exposto na Figura 7. Tais métodos são anotados por @Override. Figura 7. Método onCreate da classe MainActivity. Banco de dados para dispositivos móveis10 O método onCreate carrega consigo as ações que devem ser tomadas quando a tela referente a esta classe é renderizada. Em nosso exemplo, inicializamos as nossas variáveis nas linhas 38 a 43, lembrando que o cast do tipo dos dados deve ser o mesmo inserido no arquivo xml da tela, por exemplo, um componente de entrada de texto, e provavelmente será um tipo EditText. Chamamos os métodos eventoDataBase (Figura 8) e inicializarFirebase (Figura 9), e a ação de carregar no formulário os dados do usuário selecionado na lista por meio da ação setOnIOtemClickListener. Figura 8. Método eventoDatabase da classe MainActivity. O método eventoDatabase efetua a verificação de alguma ação feita no banco. Sempre que ocorrer uma ação de inserção, atualização ou deleção, este método atualizará a lista de alunos em nosso aplicativo. Ao utilizarmos o método addValueEventListenet (linha 60), é criado automaticamente os métodos onDataChange para alteração de dado no banco e onCancelled, que indica erros ao efetuar alguma operação. O pa- râmetro dataSnapshot armazena os alunos armazenados no banco, e com isso adicionamos à nossa lista “Pessoa” (linha 66). Após, atualizamos nossa listagem na tela. 11Banco de dados para dispositivos móveis Figura 9. Método inicializarFirebase da classe MainActivity. O método inicializarFirebase é responsável por inicializar nossa cone- xão com o banco. Então passamos nossa classe atual para o Firebase, capturamos a instância do banco e pegamos os dados em databaseReference (Figura 10). Figura 10. Métodos onOptionsItemSelected e limparCampos da classe MainActivity. Banco de dados para dispositivos móveis12 Os últimos métodos estão relacionados às ações do usuário no menu. Nosso menu possui três botões: o de inserir novo aluno, atualizar um aluno, e excluir um aluno. Na primeira instrução if, implementamos a ação de criar um aluno. Criamos um objeto Pessoa, alteramos seus atributos conforme preenchido no formulário, e a ação de salvar no banco está na linha 103. Utilizamos nosso databaseReference inicializado no método da Figura 9. Em Child pas- samos o nome da nossa base de dados no Firebase, nomeada de Pessoa. Em child(p.getUid()) indicamos que as pessoas inseridas serão ordenadas por id, e então alteramos todos os valores passando o objeto p. O segundo if efetua a ação atualizar. Observe que agora utilizamos o id da pessoa selecionada, e não de uma nova pessoa. Para os outros atributos, pegamos o que foi inserido no formulário. E o processo para atualizaros dados de uma pessoa é similar à ação de inserir, só que agora o banco entenderá que aquele id já existe e fará uma alteração. O último if efetua a ação de excluir. De forma análoga, pegamos o id da pessoa selecionada e. em vez de utilizar o setVealue, utilizamos o removeValue. Desta forma temos todas as ações básicas de um CRUD. Na Figura 11 podemos observar um exemplo de criação de um componente na tela. Na Figura 9 em editNome = (EditText)findViewById(R. id.editNome); o R.id.editNome refere-se ao parâmetro informado no android:id, desta forma relacionamos um componente na tela a uma variável na classe Java. A Figura 12 apresenta como os dados são armazenados no Firebase. Note que são os mesmos dados listados na tela do aplicativo na Figura 4. Figura 11. Exemplo de um componente na tela. 13Banco de dados para dispositivos móveis Figura 12. Resultado no Firebase. BOYER, R.; MEW, K. M. Android application development cookbook. 2nd ed. Birmingham: Packt Publishing, 2016. DATE, C. J. Introdução a sistemas de bancos de dados. Rio de Janeiro: Elsevier Brasil, 2004. MASSÉ, M. REST API design rulebook: designing consistent RESTful web service Interfaces. Sebastopol: O'Reilly Media, 2011. MICROSOFT. Dados não relacionais e NoSQL. 2018. Disponível em: https://docs.micro- soft.com/pt-br/azure/architecture/data-guide/big-data/non-relational-data. Acesso em: 5 maio 2020. Leitura recomendada MICROSOFT. Casos de uso comuns do Azure Cosmos DB. 2019. Disponível em: https://docs. microsoft.com/pt-br/azure/cosmos-db/use-cases. Acesso em: 5 maio 2020. Banco de dados para dispositivos móveis14 Os links para sites da web fornecidos neste livro foram todos testados, e seu funciona- mento foi comprovado no momento da publicação do material. No entanto, a rede é extremamente dinâmica; suas páginas estão constantemente mudando de local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade sobre qualidade, precisão ou integralidade das informações referidas em tais links. 15Banco de dados para dispositivos móveis