DEV Community

Gabriel_Silvestre
Gabriel_Silvestre

Posted on

Model - Uma breve introdução

Aviso

Arquitetura de Software é um tema bem teórico e de certa forma abstrato (ao menos para mim), então os tópicos abordados nesse artigo são a minha interpretação pessoal do conceito geral, sendo que essa interpretação é baseada na forma que utilizo esses conceitos em meus projetos.


Model

O que é?

É a camada do Software responsável pelo acesso, armazenamento e manipulação de qualquer informação, em qualquer tipo de entidade de armazenamento.

Essa entidade pode ser um arquivo de texto, memória, ou um banco de dados.

O que faz?

Como vimos em sua definição, a camada Model abstrai completamente os detalhes de acesso, manipulação e armazenamento, fornecendo recursos de fácil utilização para as outras camadas do Software.

Além disso, essa camada também é responsável pelo mapeamento dos dados na entidade que estamos usando para armazenamento.

"Sintaxe"

Por ser um conceito de arquitetura de Software, a camada Model não segue uma sintaxe padrão, porém há algumas regras que podemos respeitar, são elas:

  1. Todos os recursos contidos na camada Model devem ser desacoplados do resto da aplicação.

  2. Devemos definir e manipular nossos dados nesta camada, exportando apenas uma abstração para o resto da aplicação


Model com MySQL

O que é?

Trata-se da conexão entre a camada Model e o banco de dados MySQL. Faremos essa conexão utilizando o pacote mysql2, para instalá-lo utilizamos o comando:

npm i mysql2
Enter fullscreen mode Exit fullscreen mode

Como fazer?

Com o pacote instalado só precisamos definir a conexão utilizando o método .createPool(), disponibilizado pelo próprio pacote. Esse método deverá receber um objeto contendo todas as informações da conexão como: host, usuário, senha e o banco de dados que iremos trabalhar.

const mysql = require('mysql2/promise');

const connection = mysql.createPool({
  host: 'localhost',
  user: 'root',
  password: 'myPassword123',
  database: 'my_database',
});

module.exports = connection;
Enter fullscreen mode Exit fullscreen mode

* OBSERVAÇÃO: Podemos criar uma conexão através do método .connect(), porém essa conexão deverá ser gerenciada manualmente por nós.


Queries no Model

Query constante

O que é?

São Queries que não recebem parâmetros externos, ou seja, a Query sempre a mesma.

Sintaxe

Para executarmos esse tipo de Query utilizamos o método .execute() no objeto de conexão criado com o DB, recebendo por parâmetro a Query que queremos executar em formato de string.

Uma peculiaridade do método .execute(), é o fato dele retornar os resultados em um Array, onde os dados retornados da nossa Query ficam na primeira posição e na segunda ficam armazenados MetaDados da execução da Query.

const connection = require('./connection');

const [result] = await connection.execute('SELECT * FROM myDB');
Enter fullscreen mode Exit fullscreen mode

Query dinâmica

O que é?

São Queries que recebem algum tipo de parâmetro no momento de sua execução, as deixando dinâmicas, esse parâmetro pode ser um filtro para pesquisa, colunas a serem selecionadas ou qualquer outra "personalização" que desejarmos fazer.

Sintaxe

Para interpolarmos os diferentes parâmetros à nossa Query utilizamos uma sintaxe especial do mysql2, com o método .execute(), ela consiste na utilização de marcações, feitas através de pontos de interrogação, e definição dos parâmetros ordenadamente dentro de um Array.

Em outras palavras, colocamos pontos de interrogação onde iremos passar os parâmetros e dentro do Array passamos essas informações, sempre respeitando a ordem.

const connection = require('./connection');

const [result] = await connection.execute(
  'SELECT * FROM myDB WHERE id = ?',
  [2]
);
Enter fullscreen mode Exit fullscreen mode

* OBSERVAÇÃO: Podemos utilizar outras formas de interpolação, como template literals ou concatenação, porém isso deixará nossa aplicação extremamente vulnerável a ataques de SQL Injection.

Top comments (0)