<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nathan Silva</title>
    <description>The latest articles on DEV Community by Nathan Silva (@nathanndos).</description>
    <link>https://dev.to/nathanndos</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1316058%2F737da221-f080-44c1-8178-7d3aeefc6253.jpg</url>
      <title>DEV Community: Nathan Silva</title>
      <link>https://dev.to/nathanndos</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nathanndos"/>
    <language>en</language>
    <item>
      <title>O que é Clean Architecture?</title>
      <dc:creator>Nathan Silva</dc:creator>
      <pubDate>Wed, 27 Aug 2025 00:36:18 +0000</pubDate>
      <link>https://dev.to/nathanndos/o-que-e-clean-architecture-36h4</link>
      <guid>https://dev.to/nathanndos/o-que-e-clean-architecture-36h4</guid>
      <description>&lt;p&gt;Neste post vou explicar da maneira mais burra e simplificada o que é Clean Architecture, pois é um tema meio complexo e cheio de variáveis. Logo, esse post é pra eu mesmo me relembrar de como são as coisas, mas isso talvez ajude voce também!&lt;/p&gt;

&lt;h2&gt;
  
  
  Objetivo da Arquitetura Limpa
&lt;/h2&gt;

&lt;p&gt;Esse modelo de arquitetura de software, assim como os modelos de cebola e hexagonal buscam isolar as regras de negócio do mundo externo com camadas bem definadas. Isso faz com que a gente proteja o Core da nossa aplicação e não fique dependente de frameworks, bancos de dados, etc.&lt;/p&gt;

&lt;p&gt;O que precisa ter sempre em mente é que as dependencias são sempre de fora pra dentro!!!!&lt;/p&gt;

&lt;h2&gt;
  
  
  Camadas
&lt;/h2&gt;

&lt;p&gt;Abaixo segue a famosa imagem de representação&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fisvs2tkk4u6xoo1wmod3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fisvs2tkk4u6xoo1wmod3.png" alt=" " width="772" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Entities / Enterprise Business Rules
&lt;/h3&gt;

&lt;p&gt;Estão no mais profundo Core da aplicação, aonde irão encapsular as regras do negocio ou a lógica central.&lt;/p&gt;

&lt;h3&gt;
  
  
  UseCases / Interactores / Application Business Logic
&lt;/h3&gt;

&lt;p&gt;Responsável por implementar de forma concreta as regras de negocio e manipular as entidades, e também a comunicação entre o Core da aplicação com a camada mais externa.&lt;/p&gt;

&lt;h3&gt;
  
  
  Interface Adapters
&lt;/h3&gt;

&lt;p&gt;É camada é responsável por adaptar os dados entre o mundo externo(UI, Web, etc) para dentro da logica de negócio&lt;/p&gt;

&lt;h3&gt;
  
  
  Frameworks e drives
&lt;/h3&gt;

&lt;p&gt;Camada de dispositivos externos que vão interagir com a aplicação. Vale destacar que ela deve ser substituída sem que exista impacto nas camadas internas.&lt;/p&gt;

&lt;p&gt;Aqui mostra um resumo de dados que devem estar presentes em cada camada. Isso é uma regra, porém pode ser seguida.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0yq04a0vztgqe3upwcyv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0yq04a0vztgqe3upwcyv.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fonte: Jose Carlos Macoratti&lt;/p&gt;

&lt;h2&gt;
  
  
  Importante
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Se liga ai mano, eu sempre ficava quebrando cabeça quando via um projeto novo e cada hora com um tipo de nome. A real é que não faz diferença nenhuma, o importante mesmo é a arquitetura do software, ou seja, a estrutura lógica.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>architecture</category>
      <category>softwaredevelopment</category>
      <category>cleancode</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Liberar consumo de API C#</title>
      <dc:creator>Nathan Silva</dc:creator>
      <pubDate>Tue, 09 Jul 2024 23:55:22 +0000</pubDate>
      <link>https://dev.to/nathanndos/liberar-consumo-de-api-c-48j6</link>
      <guid>https://dev.to/nathanndos/liberar-consumo-de-api-c-48j6</guid>
      <description>&lt;p&gt;Apesar de parecer simples liberar API para uso no visual studio, no meu caso sempre veio com algum problema que fizesse com que desse erro nas requisições pelo postman, dispositivo móvel ou por algum projeto.&lt;br&gt;
Dito isso, eu fiquei quebrando cabeça pra resolver e abaixo eu listei algumas coisas que podem resolver esse problema.&lt;/p&gt;

&lt;h2&gt;
  
  
  CORS #1
&lt;/h2&gt;

&lt;p&gt;A primeira coisa a ser feita é liberar o CORS(lá ele), mas antes vamos entender o que é e como funciona.&lt;/p&gt;

&lt;h4&gt;
  
  
  O que é?
&lt;/h4&gt;

&lt;p&gt;CORS significa Cross-Origin Resource Sharing que consiste em um mecanismo que permite aplicações web façam requisições para um servidor em outro domínio além da aplicação que está hospedada. &lt;/p&gt;

&lt;h4&gt;
  
  
  Como funciona?
&lt;/h4&gt;

&lt;p&gt;Em resumo, o CORS funciona como um validador de origem, afim de garantir segurança do usuário.&lt;/p&gt;

&lt;h4&gt;
  
  
  Algumas configurações
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Access-Control-Allow-Origin: Especifica quais origens podem acessar os recursos.&lt;/li&gt;
&lt;li&gt;Access-Control-Allow-Methods: Especifica quais métodos HTTP (GET, POST, etc.) são permitidos para a requisição.&lt;/li&gt;
&lt;li&gt;Access-Control-Allow-Headers: Especifica quais cabeçalhos HTTP podem ser usados na requisição.&lt;/li&gt;
&lt;li&gt;Access-Control-Allow-Credentials: Indica se os cookies e credenciais HTTP podem ser incluídos na requisição (usado em requisições com credenciais, como cookies de autenticação).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Resolução
&lt;/h3&gt;

&lt;p&gt;No arquivo program.cs da API no visual Studio larga o seguinte código, só confere antes se você já não tinha adicionado algo antes:&lt;/p&gt;

&lt;p&gt;`var builder = WebApplication.CreateBuilder(args);&lt;/p&gt;

&lt;p&gt;builder.Services.AddControllers();&lt;br&gt;
&lt;a href="https://aka.ms/aspnetcore/swashbuckle" rel="noopener noreferrer"&gt;https://aka.ms/aspnetcore/swashbuckle&lt;/a&gt;&lt;br&gt;
builder.Services.AddEndpointsApiExplorer();&lt;br&gt;
builder.Services.AddSwaggerGen();&lt;br&gt;
builder.Services.AddCors(options =&amp;gt;&lt;br&gt;
{&lt;br&gt;
    options.AddPolicy("AllowAll",&lt;br&gt;
        builder =&amp;gt;&lt;br&gt;
        {&lt;br&gt;
            builder.AllowAnyOrigin()&lt;br&gt;
                   .AllowAnyMethod()&lt;br&gt;
                   .AllowAnyHeader();&lt;br&gt;
        });&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;var app = builder.Build();&lt;/p&gt;

&lt;p&gt;// Configure the HTTP request pipeline.&lt;br&gt;
if (app.Environment.IsDevelopment())&lt;br&gt;
{&lt;br&gt;
    app.UseSwagger();&lt;br&gt;
    app.UseSwaggerUI();&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;app.UseHttpsRedirection();&lt;br&gt;
app.UseCors("AllowAll");&lt;br&gt;
app.UseAuthorization();&lt;br&gt;
app.MapControllers();&lt;br&gt;
app.Run();&lt;br&gt;
`&lt;/p&gt;

&lt;h2&gt;
  
  
  Kestrel #2
&lt;/h2&gt;

&lt;p&gt;Antes de fazer este passo recomendo que faça o passo anterior e teste&lt;/p&gt;

&lt;h4&gt;
  
  
  O que é?
&lt;/h4&gt;

&lt;p&gt;Kestrel é um servidor integrado fornecido pelo ASP.NET Core e responsável por processar as requisições HTTP.&lt;/p&gt;

&lt;h4&gt;
  
  
  Como funciona?
&lt;/h4&gt;

&lt;p&gt;Este servidor funciona otimizando e organizando as requisições que são feitas, a partir das configurações de porta, Ip e certificados SSL. Além disso, é importante que destacar que é multiplataforma.&lt;/p&gt;

&lt;h4&gt;
  
  
  Resolução
&lt;/h4&gt;

&lt;p&gt;A configuração abaixo deve ser feita dentro do arquivo appsettings.json, sendo HTTP e/ou HTTPs. Lembrando que a porta vai alterar de acordo com o que você usa.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;{&lt;br&gt;
  "Logging": {&lt;br&gt;
    "LogLevel": {&lt;br&gt;
      "Default": "Information",&lt;br&gt;
      "Microsoft.AspNetCore": "Warning"&lt;br&gt;
    }&lt;br&gt;
  },&lt;br&gt;
  "AllowedHosts": "*",&lt;br&gt;
  "Kestrel": {&lt;br&gt;
    "Endpoints": {&lt;br&gt;
      "Http": {&lt;br&gt;
        "Url": "http://0.0.0.0:5111"&lt;br&gt;
      },&lt;br&gt;
      "Https": {&lt;br&gt;
        "Url": "https://0.0.0.0:5001",&lt;br&gt;
        "Certificate": {&lt;br&gt;
          "Path": "certificate.pfx",&lt;br&gt;
          "Password": "password"&lt;br&gt;
        }&lt;br&gt;
      }&lt;br&gt;
    }&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Liberando portas no firewall
&lt;/h2&gt;

&lt;p&gt;Siga os prints abaixo. Lembrando que faremos isso pra entrada e para saida.&lt;/p&gt;

&lt;h4&gt;
  
  
  Entrada
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F88jzoxiu7iapemotqv7b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F88jzoxiu7iapemotqv7b.png" alt="Image description" width="470" height="689"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo8yfubc71e6ljus0wewx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo8yfubc71e6ljus0wewx.png" alt="Image description" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5yyn3dt5oe1vfbwgh57n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5yyn3dt5oe1vfbwgh57n.png" alt="Image description" width="716" height="579"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fciho8tofec6qrdp3l4up.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fciho8tofec6qrdp3l4up.png" alt="Image description" width="716" height="579"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2vn1glbjidvo5fatn4u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2vn1glbjidvo5fatn4u.png" alt="Image description" width="716" height="579"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Saída
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fipu8oslq1byrv3kvhpu5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fipu8oslq1byrv3kvhpu5.png" alt="Image description" width="800" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggjqgp5qgs2ievznyiph.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggjqgp5qgs2ievznyiph.png" alt="Image description" width="714" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsh0h51h87olqidq9o5g2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsh0h51h87olqidq9o5g2.png" alt="Image description" width="714" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl0bapmk5wcymnkv01jcx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl0bapmk5wcymnkv01jcx.png" alt="Image description" width="714" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>O que é e como usar o axios?</title>
      <dc:creator>Nathan Silva</dc:creator>
      <pubDate>Tue, 09 Jul 2024 23:11:03 +0000</pubDate>
      <link>https://dev.to/nathanndos/o-que-e-e-como-usar-o-axios-3i3l</link>
      <guid>https://dev.to/nathanndos/o-que-e-e-como-usar-o-axios-3i3l</guid>
      <description>&lt;h2&gt;
  
  
  O que é?
&lt;/h2&gt;

&lt;p&gt;Axios é uma biblioteca de JavaScript que permite fazer requisições HTTP de maneira simples e eficiente, em resumo é um cliente HTTP baseado em promises. &lt;/p&gt;

&lt;h2&gt;
  
  
  Como instalar?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;yarn add axios&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz5sz8ivp0imgylsdvnwz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz5sz8ivp0imgylsdvnwz.png" alt="Image description" width="707" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Comandos importantes Git</title>
      <dc:creator>Nathan Silva</dc:creator>
      <pubDate>Thu, 27 Jun 2024 00:41:19 +0000</pubDate>
      <link>https://dev.to/nathanndos/comandos-importantes-git-2nmi</link>
      <guid>https://dev.to/nathanndos/comandos-importantes-git-2nmi</guid>
      <description>&lt;h2&gt;
  
  
  Como trocar de branch
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;git fetch&lt;/code&gt;&lt;br&gt;
&lt;code&gt;git checkout nome-branch&lt;/code&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Diretivas Vuejs</title>
      <dc:creator>Nathan Silva</dc:creator>
      <pubDate>Sat, 20 Apr 2024 17:58:36 +0000</pubDate>
      <link>https://dev.to/nathanndos/diretivas-vuejs-ld8</link>
      <guid>https://dev.to/nathanndos/diretivas-vuejs-ld8</guid>
      <description>&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;v-if&lt;/strong&gt;: Cria uma condição em uma tag&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v-show:&lt;/strong&gt; Boleano para exibir ou não um elemento.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Diferença entre v-show e v-if: O v-show apenas deixa o display do elemento como none, ou seja, o elemento html continua disponivel na DOM da página, porém sem estar visível. Já o v-if é responsável por uma renderização condicional, aonde caso não seja verdadeira simplesmente não exibe na tela e nem na DOM.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;v-vind:href&lt;/strong&gt;: Cria um link&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;v-for&lt;/strong&gt;: Faz um looping de repetição&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fufkrkvqbhaqk6oouliol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fufkrkvqbhaqk6oouliol.png" alt="Image description" width="643" height="142"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;v-bind:key&lt;/strong&gt; : Informa o indice de repetição da lista&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;props&lt;/strong&gt;: É a ação de passar a informação do componente pai para o componente filho&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;emit&lt;/strong&gt;: É possivel "ouvir" o evento de um componente filho no componente pai&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;v-on&lt;/strong&gt;: Diretiva para pegar eventos de click/submit/mouseover/keyup/scroll e realizar uma ação. A forma simplificada é utilizando um @.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyici5qwawahn8m2f9im1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyici5qwawahn8m2f9im1.png" alt="Image description" width="769" height="102"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O v-on aceita modificadores em sua chamada, e por sua vez podem ser encadeados&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/click"&gt;@click&lt;/a&gt;.prevent&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/click"&gt;@click&lt;/a&gt;.once&lt;br&gt;
@keyup.a &lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/click"&gt;@click&lt;/a&gt;.prevent.once&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;v-html&lt;/strong&gt;: Possibilita colocar elementos HTML dentro de determinadas tags. Caso a tag já possua outros elementos html dentro dele, o mesmo será substituido pelos valores que serão passados atravez da diretiva.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flqcs8sz6vuy0otu4zzv1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flqcs8sz6vuy0otu4zzv1.png" alt="Image description" width="521" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;v-once&lt;/strong&gt;: Executa o elemento HTML apenas uma vez, ou seja, não recebe mais atualizações de tela após a primeira execução.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&amp;lt;component :is="nome_componente"&lt;/strong&gt;: Funciona com um componente generico que pode se "transformar" qualquer coisa&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Entendo o conceito de VueJS</title>
      <dc:creator>Nathan Silva</dc:creator>
      <pubDate>Wed, 03 Apr 2024 00:43:57 +0000</pubDate>
      <link>https://dev.to/nathanndos/entendo-o-conceito-de-vuejs-2i8c</link>
      <guid>https://dev.to/nathanndos/entendo-o-conceito-de-vuejs-2i8c</guid>
      <description>&lt;h2&gt;
  
  
  O que é?
&lt;/h2&gt;

&lt;p&gt;Resumindo o Vuejs é uma biblioteca javascript que busca manipular elementos HTML(DOM) por meio de lógicas de promogração feitas a partir do Javascript. Tudo que acontece na aplicação é feito a partir da instancia de Vue que faz o gerenciamento desses elementos por meio de valores e tags.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exemplo inicial
&lt;/h2&gt;

&lt;p&gt;Pra gente entender melhor como funciona tudo isso, vamos fazer ver esse exemplo abaixo. Nele estamos criando uma página básica em html com vue importado, uma tag div com id "app" e umas informações na tag script.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqt7xjfu47dchyr89r76r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqt7xjfu47dchyr89r76r.png" alt="Image description" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Idai? Bom, a grande jogada inicial esta nas informações fornecidas pelo console.log. Nele podemos ver que já estamos conseguindo capturar elementos existentes na DOM, e é ai que a brincadeira começa!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6vr3fdde63exv9h5hutk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6vr3fdde63exv9h5hutk.png" alt="Image description" width="493" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conforme deu pra ver o nosso objeto "options" já está com o nosso app. Em projetos instalados por CLI é normal o elemento principal ser chamado de APP, o que eu to fazendo aqui é mostrando o parte inicial pra ficar bem claro o que está acontencendo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Atributos reativos
&lt;/h2&gt;

&lt;p&gt;Atributos reativos são simplesmente variáveis que serão enviadas para o HTML por meio do JavaScript. Com isso, poderemos "enviar" essas váriaveis para a DOM utilizar como bem entender por meio do que podemos chamar de "double mustache". Obs: Esses valores são enviados por meio da propriedade DATA.&lt;br&gt;
Que raios é double mustache? É só abre e fecha chaves kkk. Exemplo: &lt;code&gt;{{ pessoa_idade }}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Se liga nisso:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftqmwp2xy2tpgylbbdelg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftqmwp2xy2tpgylbbdelg.png" alt="Image description" width="759" height="675"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O primeiro faz referencia a variavel exportada lá na propriedade "data" do objeto "options", enquanto o segundo elemento é apenas um texto simples. Resultado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg6b7i65su2j7ndkayuu1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg6b7i65su2j7ndkayuu1.png" alt="Image description" width="435" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Métodos
&lt;/h2&gt;

&lt;p&gt;Assim como temos a possibilidade de utilizarmos váriaveis na DOM, também podemos fornecer funções pra serem executadas!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmeo44j4ha1grshcl5ql4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmeo44j4ha1grshcl5ql4.png" alt="Image description" width="690" height="813"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com esse simples exemplo, obtemos o resultado de &lt;em&gt;9&lt;/em&gt; e &lt;em&gt;5&lt;/em&gt; exibidos diretamente no nosso HTML.&lt;/p&gt;

&lt;p&gt;Além disso, podemos também utilizar as variaveis que estão dentro da propriedade "data" por meio da palavra reservada "this". O "this" faz referência a própria instância do VUE, o que permite utilizamos seus respectivos valores.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxadlmb7nhqwt40444o5k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxadlmb7nhqwt40444o5k.png" alt="Image description" width="531" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Como criar uma API com EntityFramework e SQL Server</title>
      <dc:creator>Nathan Silva</dc:creator>
      <pubDate>Sat, 09 Mar 2024 01:38:54 +0000</pubDate>
      <link>https://dev.to/nathanndos/como-criar-uma-api-com-entityframework-e-sql-server-56m8</link>
      <guid>https://dev.to/nathanndos/como-criar-uma-api-com-entityframework-e-sql-server-56m8</guid>
      <description>&lt;p&gt;Neste artigo irei mostrar como criar uma API simples utilizando EntityFramework com SQL server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Preparando o ambiente
&lt;/h3&gt;

&lt;p&gt;Vamos começar criando o projeto. Primeira coisa a ser feita é criar um projeto do tipo ASP.NET Core Web API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flluzrsqt3v38as2ml1le.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flluzrsqt3v38as2ml1le.png" alt="Image description" width="800" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com o projeto criado a gente já pode testar com o Swagger uma das rotas padrões.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdw7oxb0s75knff7zapxo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdw7oxb0s75knff7zapxo.png" alt="Image description" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pra esse tutorial a gente já vai fazer uma coisa mais "next level". Vamos dividir as nossas camadas de dados em API, DAL, BLL e Entity. Com isso vamos adicionar esses 3 projetos com o tipo Class.Library.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmnhldcoc7faxm69e8ma3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmnhldcoc7faxm69e8ma3.png" alt="Image description" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Instalando dependências
&lt;/h4&gt;

&lt;p&gt;Agora é hora de utilizarmos o Nuget para adicionar alguns pacotes ao nosso projeto de DAL e API(futuramente os outros projetos também podem precisar desses pacotes). Tools &amp;gt; Nuget package manager &amp;gt; Manage package nuget for solution.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnm94vsne5ubt4nwe8val.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnm94vsne5ubt4nwe8val.png" alt="Image description" width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ao tentar instalar, será solicitado outros pacotes, ai é só aceitar tudo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Estruturando o projeto com classes
&lt;/h3&gt;

&lt;p&gt;Agora que já temos nossas dependências instaladas, vamos criar uma classe na DAL que irá herdar o DbContext e fazer as ações necessárias.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw4ifb86p9daws0qungsh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw4ifb86p9daws0qungsh.png" alt="Image description" width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Você vai notar que já tem algumas configurações do modelbuilder, mas eu estou basicamente informando quais vão ser os campos da minha tabela. De resto é tudo igual. Inclusive, essa é a minha classe Pessoa que foi criada no projeto de Entity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8i2d2jhhsh1wxt0v1rru.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8i2d2jhhsh1wxt0v1rru.png" alt="Image description" width="531" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Criando a conexão
&lt;/h3&gt;

&lt;p&gt;No arquivo appSettings.json do projeto Asp.Net insera a string de conexão que leverá o nosso banco&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9m8ymou6si1onw20otjz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9m8ymou6si1onw20otjz.png" alt="Image description" width="800" height="133"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;"StringConnection" : "server=(local)\\SQL2019;database=vrsolicitacoes;integrated security=true;trustservercertificate=true"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Logo após isso, iremos até o Program.cs informar que utilizaremos esse caminho para usar o SqlServer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgyo00eqjflebhxspexnp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgyo00eqjflebhxspexnp.png" alt="Image description" width="800" height="133"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Migrations
&lt;/h3&gt;

&lt;p&gt;Agora vamos criar o nosso banco utilizando migration. Lá no Package Manager Console digite:&lt;/p&gt;

&lt;p&gt;Add-Migration "Nome da migration aqui"&lt;/p&gt;

&lt;p&gt;Depois disso é só rodar o seguinte comando&lt;br&gt;
&lt;code&gt;&lt;br&gt;
Update-Database&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Nota
&lt;/h4&gt;

&lt;p&gt;Se der o erro apresentado abaixo, basta trocar o projeto target para aquele que estiver com a classe que herda do dbContext.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Your target project '' doesn't match your migrations assembly 'DAL'. Either change your target project or change your migrations assembly.&lt;br&gt;
Change your migrations assembly by using DbContextOptionsBuilder. E.g. options.UseSqlServer(connection, b =&amp;gt; b.MigrationsAssembly("ApiVrSolicitacoes")). By default, the migrations assembly is the assembly containing the DbContext.&lt;br&gt;
Change your target project to the migrations project by using the Package Manager Console's Default project drop-down list, or by executing "dotnet ef" from the directory containing the migrations project.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
    </item>
    <item>
      <title>Como instalar o VueJS</title>
      <dc:creator>Nathan Silva</dc:creator>
      <pubDate>Sat, 02 Mar 2024 21:10:19 +0000</pubDate>
      <link>https://dev.to/nathanndos/como-instalar-o-vuejs-31j0</link>
      <guid>https://dev.to/nathanndos/como-instalar-o-vuejs-31j0</guid>
      <description>&lt;p&gt;Existem duas formas de instalar o VueJs em uma aplicação. Logo abaixo irei abordar os dois possíveis jeitos de fazer isso.&lt;/p&gt;

&lt;h2&gt;
  
  
  CDN
&lt;/h2&gt;

&lt;p&gt;CDN é a sigla para Content Delivery Network. É forma mais comum de ser utilizada em pequenos projetos devido a sua facilidade na instalação.&lt;br&gt;
De forma breve e resumida, o CDN armazena os dados de JavaScript, CSS e imagens referentes ao Vue e os retorna da maneira mais rápida possível.&lt;/p&gt;

&lt;h3&gt;
  
  
  Como instalar e adicionar o projeto?
&lt;/h3&gt;

&lt;p&gt;Você pode encontrar o passo a passo mais explicativo acessando o site &lt;a href="https://vuejs.org/guide/quick-start.html"&gt;VueJs&lt;/a&gt;. Rolando um pouco a gente vai pegar apenas o link principal fornecido e adicionar ao nosso projeto.(Fica tranquilo que eu vou mostrar)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2q62t1btk2t8vvahdtrl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2q62t1btk2t8vvahdtrl.png" alt="Image description" width="733" height="220"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;script src="https://unpkg.com/vue@3/dist/vue.global.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Agora vamos ao Visual Studio Code!&lt;br&gt;
Crie um arquivo simples de HTML e adicione o script passado anteriormente&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx9by1n9q3m2qexfhq0he.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx9by1n9q3m2qexfhq0he.png" alt="Image description" width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  CLI
&lt;/h2&gt;

&lt;p&gt;Esse método de instalação é mais ideial dos dois, pois é possível configurar o projeto de forma rápida e completa de maneira simples.&lt;br&gt;
Primeira coisa ser feita é baixar o &lt;a href="https://nodejs.org/en/download"&gt;NodeJs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Após a instalação, precisamos garantir que está tudo certo com o Node e o Npm. Para isso, abra o CMD e digite os códigos para verificar a versão de instalação de acordo com a imagem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fshousukblq57kljnsrcs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fshousukblq57kljnsrcs.png" alt="Image description" width="486" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora que já está tudo certo, abra novamente o terminal e digite o seguinte código para instalar o Vue de forma global.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install -g @vue/cli&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Depois disso é criar um projeto. Entre na pasta desejada, abra o terminal e digite o comando abaixo:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;vue create nome_produto&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;IMPORTANTE. Se for um projeto já criado ou se tiver sido baixado do github bastante digitar o codigo abaixo antes.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Depois de instalado para rodar o server é só rodar o seguinte código:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run serve&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Ai é selecionar a versão do Vue e está pronto! &lt;br&gt;
Espero que tenham gostado :)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Como manter o estado de uma tela ao chamar deeplink no xamarin C#</title>
      <dc:creator>Nathan Silva</dc:creator>
      <pubDate>Fri, 01 Mar 2024 13:53:53 +0000</pubDate>
      <link>https://dev.to/nathanndos/como-manter-o-estado-de-uma-tela-ao-chamar-deeplink-no-xamarin-c-5dj5</link>
      <guid>https://dev.to/nathanndos/como-manter-o-estado-de-uma-tela-ao-chamar-deeplink-no-xamarin-c-5dj5</guid>
      <description>&lt;h2&gt;
  
  
  O que é deeplink?
&lt;/h2&gt;

&lt;p&gt;De forma resumida, o deeplink são chamadas de aplicativos para outros aplicativos para a realização de ações especificas. &lt;br&gt;
Exemplo: No ifood, quando terminamos de selecionar os nossos produtos e finalizamos com a forma de pagamento Cartao Nubank e finalizamos o aplicativo do banco é aberto já mostrando os valores e informações. Ao fazer o pagamento, o app da nubank retorna ao ifood finalizando assim o pedido.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problema
&lt;/h2&gt;

&lt;p&gt;Nesse contexto, ao fazer essa chamada para um app externo, pode ser o que o app de origem seja "destruído" e juntamente com ele todas as informações armazenadas em memória. Abaixo eu vou mostrar como podemos manter o estado do aplicativo de origem e retornar ao ponto em que paramos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solução 1
&lt;/h2&gt;

&lt;p&gt;Primeiramente vamos ter certeza que de que toda a informação vinda do Bundle está sendo perdida. No método OnCreate na Intent, verifique se o valor do parâmetro está vazio.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6lke1we6lir25hmzv4xv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6lke1we6lir25hmzv4xv.png" alt="Image description" width="800" height="142"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se estiver nulo, vá para a solução 2, caso contrário siga o passo abaixo!&lt;/p&gt;

&lt;p&gt;Como ainda estamos com algumas informações do Bundle armazenadas, basta a gente salvar o estado do que quisermos e posteriormente restaurar o estado. Vamos usar o metodo para salvar o estado.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;protected override void OnSaveInstanceState(Bundle outState)&lt;br&gt;
{&lt;br&gt;
    base.OnSaveInstanceState(outState);&lt;br&gt;
    // Salvar os dados da tela no Bundle&lt;br&gt;
    outState.PutString("MeuValor", meuValor);&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Em seguida, basta chamar o metodo para restaurar esse estado&lt;/p&gt;

&lt;p&gt;&lt;code&gt;protected override void OnRestoreInstanceState(Bundle savedInstanceState)&lt;br&gt;
        {&lt;br&gt;
            base.OnRestoreInstanceState(savedInstanceState);&lt;br&gt;
            teste = savedInstanceState.GetString("MeuValor");&lt;br&gt;
        }&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Solução 2
&lt;/h2&gt;

&lt;p&gt;Se o Bundle está vindo zerado(null) então esta é a solução: Usaremos um artifício de persistência de dados temporárias no dispositivo para armazenar as informações que julgamos importantes.&lt;/p&gt;

&lt;p&gt;Adicione o bloco de código abaixo: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;protected override void OnSaveInstanceState(Bundle outState)&lt;br&gt;
{&lt;br&gt;
    base.OnSaveInstanceState(outState);&lt;br&gt;
    // Salvar o valor de "MinhaVariavel" no SharedPreferences&lt;br&gt;
    GetPreferences(FileCreationMode.Private).Edit().PutString("TextoQualquer", MinhaVariavel).Apply();&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Neste caso, não será necessário sobrescrever o método OnRestoreInstanceState, mas sim inserir um trecho dentro do OnCreate&lt;/p&gt;

&lt;p&gt;&lt;code&gt;MinhaVariavel= GetPreferences(FileCreationMode.Private).GetString("TextoQualquer", "");&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Entendendo o que foi feito
&lt;/h3&gt;

&lt;p&gt;O método GetPreferences o Android cria automaticamente um arquivo de preferências compartilhadas para você, associado à atividade atual, ou seja, ele persiste os dados temporariamente. Além disso, caso queira tornar essas informações visíveis a nivel global da aplicação, você pode utilizar o GetSharedPreferences. &lt;/p&gt;

&lt;h3&gt;
  
  
  Usando o GetSharedPreferences
&lt;/h3&gt;

&lt;p&gt;A sintaxe muda um pouco, o sentido principal ainda é o mesmo.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;protected override void OnSaveInstanceState(Bundle outState)&lt;br&gt;
{&lt;br&gt;
    base.OnSaveInstanceState(outState);&lt;br&gt;
    // Salvar o valor de "MinhaVariavel" no SharedPreferences&lt;br&gt;
    ISharedPreferencesEditor editor = GetSharedPreferences("MeusEstados", FileCreationMode.Private).Edit();&lt;br&gt;
    editor.PutString("stringVariavel", MinhaVariavel);&lt;br&gt;
    editor.Apply();&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Agora é só ir no onCreate!&lt;/p&gt;

&lt;p&gt;MinhaVariavel = GetSharedPreferences("MeusEstados", FileCreationMode.Private).GetString("stringVariavel", "");&lt;/p&gt;

&lt;p&gt;Caso queira saber mais sobre essas diferenças &lt;a href="https://stackoverflow.com/questions/33447290/whats-the-difference-between-getdefaultsharedpreferences-and-getpreferences"&gt;Clique aqui!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Até a próxima! :D&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
