{"id":1291,"date":"2024-08-25T10:52:55","date_gmt":"2024-08-25T13:52:55","guid":{"rendered":"https:\/\/desvendandoocodigo.com.br\/?p=1291"},"modified":"2024-08-25T20:49:14","modified_gmt":"2024-08-25T23:49:14","slug":"javascript-com-arquitetura-mvc-e-mini-projeto","status":"publish","type":"post","link":"https:\/\/desvendandoocodigo.com.br\/?p=1291","title":{"rendered":"JAVASCRIPT COM ARQUITETURA MVC E MINI PROJETO"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>O padr\u00e3o <strong>MVC<\/strong> (Model-View-Controller) \u00e9 uma arquitetura de software que separa a aplica\u00e7\u00e3o em tr\u00eas componentes principais, cada um com responsabilidades distintas. Esse padr\u00e3o \u00e9 amplamente utilizado no desenvolvimento de aplica\u00e7\u00f5es web, incluindo as que usam JavaScript, por ajudar a organizar e gerenciar o c\u00f3digo de forma eficiente e escal\u00e1vel.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. <strong>Model (Modelo)<\/strong><\/h2>\n\n\n\n<ul>\n<li><strong>Responsabilidade:<\/strong> O Model \u00e9 respons\u00e1vel pela l\u00f3gica de neg\u00f3cios e pela intera\u00e7\u00e3o com os dados da aplica\u00e7\u00e3o. Ele define a estrutura dos dados, valida\u00e7\u00f5es e regras de neg\u00f3cios. Em uma aplica\u00e7\u00e3o que usa um banco de dados, o Model seria a camada que se comunica diretamente com o banco, fazendo opera\u00e7\u00f5es como criar, ler, atualizar e deletar (CRUD).<\/li>\n\n\n\n<li><strong>Exemplo em JavaScript:<\/strong> Em um ambiente Node.js, voc\u00ea pode usar bibliotecas como Sequelize ou Mongoose (para MongoDB) para definir os modelos. Um Model de usu\u00e1rio poderia incluir propriedades como nome, email e senha, e m\u00e9todos para validar dados de entrada.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">2. <strong>View (Vis\u00e3o)<\/strong><\/h2>\n\n\n\n<ul>\n<li><strong>Responsabilidade:<\/strong> A View \u00e9 a parte da aplica\u00e7\u00e3o que lida com a interface do usu\u00e1rio. Ela exibe os dados que v\u00eam do Model e envia as a\u00e7\u00f5es do usu\u00e1rio para o Controller. Em aplica\u00e7\u00f5es JavaScript, a View pode ser escrita usando HTML e CSS, com frameworks ou bibliotecas de front-end como React, Angular ou Vue.js.<\/li>\n\n\n\n<li><strong>Exemplo em JavaScript:<\/strong> Um componente React que exibe uma lista de produtos. Esse componente renderiza a interface do usu\u00e1rio e pode chamar fun\u00e7\u00f5es de um Controller para adicionar ou remover produtos.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">3. <strong>Controller (Controlador)<\/strong><\/h2>\n\n\n\n<ul>\n<li><strong>Responsabilidade:<\/strong> O Controller atua como um intermedi\u00e1rio entre o Model e a View. Ele recebe as entradas do usu\u00e1rio atrav\u00e9s da View, processa essas entradas (chamando m\u00e9todos no Model quando necess\u00e1rio) e determina qual View renderizar. O Controller \u00e9 respons\u00e1vel por manipular os dados de acordo com a l\u00f3gica de neg\u00f3cios e atualizar as Views conforme necess\u00e1rio.<\/li>\n\n\n\n<li><strong>Exemplo em JavaScript:<\/strong> Em um ambiente Node.js com Express, um Controller poderia definir rotas para lidar com requisi\u00e7\u00f5es HTTP (GET, POST, etc.). Por exemplo, uma rota para <code>\/usuarios<\/code> poderia chamar uma fun\u00e7\u00e3o no Controller que, por sua vez, consulta o Model para obter os dados dos usu\u00e1rios e envia esses dados para uma View.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">PROJETO PR\u00c1TICO DE MVC COM JAVASCRIPT<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Instalar os pacotes que iremos utilizar no projeto:<\/h2>\n\n\n\n<ul>\n<li>npm init -y<\/li>\n\n\n\n<li>npm i express<\/li>\n\n\n\n<li>npm i mysql2<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Estrutura do Projeto<\/h2>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" width=\"298\" height=\"579\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXcxKUfSWKjsCt0CBZNXUxZWhP8CMsi1cLgkNSuRMUSHJ0Ljq57dEb4LiguEBtfL77CgMxyC4hwy3qnh1FRQN1cZZFbALe-g6U-Xi-uMkRXFeUdUN4T2QvVeXmw_2e6m-5StcUNYT3QNOE2xaZAWDlo3uCg6?key=TMjW78mTQWJw_q8MVIl1cA\"><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Criar um banco de dados no MySQL eu chamei de MVC<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Criar a tabela:<\/h2>\n\n\n\n<p>CREATE TABLE IF NOT EXISTS cliente (<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;id INT AUTO_INCREMENT PRIMARY KEY,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;nome VARCHAR(100) NOT NULL,<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;cpf VARCHAR(100) NOT NULL&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>);<\/p>\n\n\n\n<p>Crie uma pasta chamada <strong>config<\/strong>, \u00e9 esta pasta que ser\u00e1 usada para armazenar as configura\u00e7\u00f5es com o nosso banco de dados.<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" width=\"342\" height=\"272\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXc1PiBPYYQu41g59Qh_Taq_PKjnq4yC2NuUVqdOLIMAOS2Zg3laLsg0Y7dJE_iNu5XlbihqC79N_8-egRmqPya9r7cX9xvEYJaETDe7xqnClalNPDTF5lmFfmg6CpD7PjJHr_No-r-XtSPwCkm-RfEE1CEb?key=TMjW78mTQWJw_q8MVIl1cA\"><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Configura\u00e7\u00e3o o arquivo <strong>db.js<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"543\" height=\"430\" src=\"https:\/\/desvendandoocodigo.com.br\/wp-content\/uploads\/2024\/08\/image.png\" alt=\"\" class=\"wp-image-1292\" srcset=\"https:\/\/desvendandoocodigo.com.br\/wp-content\/uploads\/2024\/08\/image.png 543w, https:\/\/desvendandoocodigo.com.br\/wp-content\/uploads\/2024\/08\/image-300x238.png 300w\" sizes=\"(max-width: 543px) 100vw, 543px\" \/><\/figure>\n\n\n\n<p><strong>OBS<\/strong>: Dependendo da configura\u00e7\u00e3o que foi feita na instala\u00e7\u00e3o do MySQL pode ser necess\u00e1rio informar a porta de comunica\u00e7\u00e3o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Modelagem de Dados<\/strong><\/h2>\n\n\n\n<p>Vamos come\u00e7ar pela cria\u00e7\u00e3o do modelo na pasta <strong>models<\/strong>, seguindo o padr\u00e3o MVC.&nbsp;<\/p>\n\n\n\n<p>No documento <strong>ClienteModel.js<\/strong> inserir o c\u00f3digo abaixo:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"546\" height=\"511\" src=\"https:\/\/desvendandoocodigo.com.br\/wp-content\/uploads\/2024\/08\/image-1.png\" alt=\"\" class=\"wp-image-1293\" srcset=\"https:\/\/desvendandoocodigo.com.br\/wp-content\/uploads\/2024\/08\/image-1.png 546w, https:\/\/desvendandoocodigo.com.br\/wp-content\/uploads\/2024\/08\/image-1-300x281.png 300w\" sizes=\"(max-width: 546px) 100vw, 546px\" \/><\/figure>\n\n\n\n<p>Exportando o m\u00f3dulo como Cliente, agora podemos acessar quando criarmos os nossos controladores para acessar o banco de dados, realizar as fun\u00e7\u00f5es SQL e implementar as opera\u00e7\u00f5es da nossa API.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Criando Controladores<\/strong><\/h2>\n\n\n\n<p>Vamos para a cria\u00e7\u00e3o dos controladores que ir\u00e3o manipular as a\u00e7\u00f5es relacionadas ao modelo Cliente.<\/p>\n\n\n\n<p>Controladores fazem a intermedia\u00e7\u00e3o entre as requisi\u00e7\u00f5es HTTP e os Models.<\/p>\n\n\n\n<p>No documento <strong>clienteController.js<\/strong> inserir o c\u00f3digo abaixo:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"482\" height=\"550\" src=\"https:\/\/desvendandoocodigo.com.br\/wp-content\/uploads\/2024\/08\/image-2.png\" alt=\"\" class=\"wp-image-1294\" srcset=\"https:\/\/desvendandoocodigo.com.br\/wp-content\/uploads\/2024\/08\/image-2.png 482w, https:\/\/desvendandoocodigo.com.br\/wp-content\/uploads\/2024\/08\/image-2-263x300.png 263w\" sizes=\"(max-width: 482px) 100vw, 482px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>A partir daqui, podemos configurar o nosso <strong>app<\/strong>.js usando os controladores para definir as rotas e quais a\u00e7\u00f5es correspondentes.<\/p>\n\n\n\n<p>Abra o arquivo <strong>app.js<\/strong> e vamos come\u00e7ar importando as depend\u00eancias necess\u00e1rias, incluindo a configura\u00e7\u00e3o com o banco de dados, o express e o controlador.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"308\" src=\"https:\/\/desvendandoocodigo.com.br\/wp-content\/uploads\/2024\/08\/image-3.png\" alt=\"\" class=\"wp-image-1295\" srcset=\"https:\/\/desvendandoocodigo.com.br\/wp-content\/uploads\/2024\/08\/image-3.png 480w, https:\/\/desvendandoocodigo.com.br\/wp-content\/uploads\/2024\/08\/image-3-300x193.png 300w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Podemos utilizar o <strong>Postman API<\/strong> para testar as rotas, por\u00e9m vamos criar um <strong>index.html<\/strong> para utilizar o verbo POST.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"614\" height=\"669\" src=\"https:\/\/desvendandoocodigo.com.br\/wp-content\/uploads\/2024\/08\/image-12.png\" alt=\"\" class=\"wp-image-1313\" srcset=\"https:\/\/desvendandoocodigo.com.br\/wp-content\/uploads\/2024\/08\/image-12.png 614w, https:\/\/desvendandoocodigo.com.br\/wp-content\/uploads\/2024\/08\/image-12-275x300.png 275w\" sizes=\"(max-width: 614px) 100vw, 614px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">ATUALIZAR O APP.JS&nbsp;<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"482\" height=\"392\" src=\"https:\/\/desvendandoocodigo.com.br\/wp-content\/uploads\/2024\/08\/image-8.png\" alt=\"\" class=\"wp-image-1300\" srcset=\"https:\/\/desvendandoocodigo.com.br\/wp-content\/uploads\/2024\/08\/image-8.png 482w, https:\/\/desvendandoocodigo.com.br\/wp-content\/uploads\/2024\/08\/image-8-300x244.png 300w\" sizes=\"(max-width: 482px) 100vw, 482px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">RESUMO<\/h2>\n\n\n\n<p>O padr\u00e3o de arquitetura MVC (Model-View-Controller) \u00e9 crucial para o desenvolvimento de aplica\u00e7\u00f5es web organizadas e escal\u00e1veis. Ele separa a l\u00f3gica de neg\u00f3cios (Model), a interface do usu\u00e1rio (View) e o controle das intera\u00e7\u00f5es do usu\u00e1rio (Controller). Essa separa\u00e7\u00e3o de responsabilidades facilita a manuten\u00e7\u00e3o e o desenvolvimento colaborativo, permitindo que desenvolvedores trabalhem simultaneamente em diferentes partes do sistema sem conflitos. Al\u00e9m disso, melhora a reutiliza\u00e7\u00e3o de c\u00f3digo, pois os componentes podem ser facilmente reaproveitados ou substitu\u00eddos. MVC tamb\u00e9m promove a escalabilidade e a facilidade de testes, tornando o desenvolvimento de aplica\u00e7\u00f5es complexas mais eficiente e menos propenso a erros.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O padr\u00e3o MVC (Model-View-Controller) \u00e9 uma arquitetura de software que separa a aplica\u00e7\u00e3o em tr\u00eas componentes principais, cada um com responsabilidades distintas. Esse padr\u00e3o \u00e9 amplamente utilizado no desenvolvimento de aplica\u00e7\u00f5es web, incluindo as que usam JavaScript, por ajudar a organizar e gerenciar o c\u00f3digo de forma eficiente e escal\u00e1vel. 1. Model (Modelo) 2. View (Vis\u00e3o) 3. Controller (Controlador) PROJETO PR\u00c1TICO DE MVC COM JAVASCRIPT Instalar os pacotes que iremos utilizar no projeto: Estrutura do Projeto Criar um banco de dados no MySQL eu chamei de MVC Criar a tabela: CREATE TABLE IF NOT EXISTS cliente ( &nbsp;&nbsp;&nbsp;&nbsp;id INT AUTO_INCREMENT PRIMARY KEY, &nbsp;&nbsp;&nbsp;&nbsp;nome VARCHAR(100) NOT NULL, &nbsp;&nbsp;&nbsp;&nbsp;cpf VARCHAR(100) NOT NULL&nbsp;&nbsp;&nbsp; ); Crie uma pasta chamada config, \u00e9 esta pasta que ser\u00e1 usada para armazenar as configura\u00e7\u00f5es com o nosso banco de dados. Configura\u00e7\u00e3o o arquivo db.js OBS: Dependendo da configura\u00e7\u00e3o que foi feita na instala\u00e7\u00e3o do MySQL pode ser necess\u00e1rio informar a porta de comunica\u00e7\u00e3o. Modelagem de Dados Vamos come\u00e7ar pela cria\u00e7\u00e3o do modelo na pasta models, seguindo o padr\u00e3o MVC.&nbsp; No documento ClienteModel.js inserir o c\u00f3digo abaixo: Exportando o m\u00f3dulo como Cliente, agora podemos acessar quando criarmos os nossos controladores para acessar o banco de dados, realizar as fun\u00e7\u00f5es SQL e implementar as opera\u00e7\u00f5es da nossa API. Criando Controladores Vamos para a cria\u00e7\u00e3o dos controladores que ir\u00e3o manipular as a\u00e7\u00f5es relacionadas ao modelo Cliente. Controladores fazem a intermedia\u00e7\u00e3o entre as requisi\u00e7\u00f5es HTTP e os Models. No documento clienteController.js inserir o c\u00f3digo abaixo: A partir daqui, podemos configurar o nosso app.js usando os controladores para definir as rotas e quais a\u00e7\u00f5es correspondentes. Abra o arquivo app.js e vamos come\u00e7ar importando as depend\u00eancias necess\u00e1rias, incluindo a configura\u00e7\u00e3o com o banco de dados, o express e o controlador. Podemos utilizar o Postman API para testar as rotas, por\u00e9m vamos criar um index.html para utilizar o verbo POST. ATUALIZAR O APP.JS&nbsp; RESUMO O padr\u00e3o de arquitetura MVC (Model-View-Controller) \u00e9 crucial para o desenvolvimento de aplica\u00e7\u00f5es web organizadas e escal\u00e1veis. Ele separa a l\u00f3gica de neg\u00f3cios (Model), a interface do usu\u00e1rio (View) e o controle das intera\u00e7\u00f5es do usu\u00e1rio (Controller). Essa separa\u00e7\u00e3o de responsabilidades facilita a manuten\u00e7\u00e3o e o desenvolvimento colaborativo, permitindo que desenvolvedores trabalhem simultaneamente em diferentes partes do sistema sem conflitos. Al\u00e9m disso, melhora a reutiliza\u00e7\u00e3o de c\u00f3digo, pois os componentes podem ser facilmente reaproveitados ou substitu\u00eddos. MVC tamb\u00e9m promove a escalabilidade e a facilidade de testes, tornando o desenvolvimento de aplica\u00e7\u00f5es complexas mais eficiente e menos propenso a erros.<\/p>\n","protected":false},"author":1,"featured_media":1301,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/posts\/1291"}],"collection":[{"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1291"}],"version-history":[{"count":9,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/posts\/1291\/revisions"}],"predecessor-version":[{"id":1315,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/posts\/1291\/revisions\/1315"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/media\/1301"}],"wp:attachment":[{"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1291"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1291"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}