<?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: Guilherme Pirani</title>
    <description>The latest articles on DEV Community by Guilherme Pirani (@guilhermepirani).</description>
    <link>https://dev.to/guilhermepirani</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%2F754899%2F4149c1ee-686f-4a12-b0d5-0111b52bb86d.png</url>
      <title>DEV Community: Guilherme Pirani</title>
      <link>https://dev.to/guilhermepirani</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/guilhermepirani"/>
    <language>en</language>
    <item>
      <title>Tipos Primitivos no C#</title>
      <dc:creator>Guilherme Pirani</dc:creator>
      <pubDate>Tue, 13 Sep 2022 12:36:12 +0000</pubDate>
      <link>https://dev.to/guilhermepirani/tipos-primitivos-no-c-11en</link>
      <guid>https://dev.to/guilhermepirani/tipos-primitivos-no-c-11en</guid>
      <description>&lt;p&gt;Tipos primitivos são um conjunto de tipos de dados básicos que servem de base para todos os outros tipos. &lt;/p&gt;

&lt;p&gt;Podemos os resumir em 4 categorias: &lt;strong&gt;Inteiro&lt;/strong&gt;, &lt;strong&gt;Real&lt;/strong&gt;(float), &lt;strong&gt;Lógico&lt;/strong&gt; e &lt;strong&gt;Texto&lt;/strong&gt;. Ainda assim, muitas linguagens de programação subdividem essas categorias dependendo da quantidade de memória utilizada, por exemplo &lt;em&gt;shorts&lt;/em&gt; e &lt;em&gt;longs&lt;/em&gt; para os inteiros.&lt;/p&gt;

&lt;p&gt;Na linguagem C# não há uma definição dos tipos primitivos em sua especificação. Ao invés disso são usados aliases para os tipos definidos na plataforma .NET! Isso quer dizer que você pode utilizar qualquer das nomenclaturas sem nenhum problema.&lt;br&gt;
A tabela abaixo mostra como ficam essas relações, com uma legenda da categoria a qual cada tipo pertence:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gJ_ZGaok--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lbrx21ux0s6e02q6k2wu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gJ_ZGaok--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lbrx21ux0s6e02q6k2wu.png" alt="Image description" width="880" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Na própria &lt;a href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/built-in-types"&gt;documentação&lt;/a&gt; do C# podemos ter mais informações sobre cada um desses tipos.&lt;br&gt;
A próxima tabela resume bem o que cada um desses tipos representa (ou suporta):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HdOtQY5t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ml3wbm9kka0qw07rusex.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HdOtQY5t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ml3wbm9kka0qw07rusex.jpg" alt="Image description" width="684" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;É importante ter em mente os limites do que podemos atribuir a cada um dos tipos. Ao mexermos com dinheiro por exemplo, usamos o tipo decimal, pois apesar de float e double possuírem casas decimais, o tamanho deles certamente causará perda de precisão e suas variáveis deixarão de apresentar o valor que você espera delas... (Mais sobre isso &lt;a href="https://docs.microsoft.com/en-us/cpp/build/why-floating-point-numbers-may-lose-precision?view=msvc-170"&gt;aqui&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Esse é o post das tabelas, e aqui vamos preparar mais uma. Todos os tipos possuem um valor padrão. Esse padrão é o que será atribuído a uma variável de dado tipo caso não lhe passemos nenhum outro valor.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sln6C2et--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jbpyqsfvh77tp5bd5lri.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sln6C2et--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jbpyqsfvh77tp5bd5lri.png" alt="Image description" width="880" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aqui o &lt;strong&gt;char&lt;/strong&gt; teve uma definição um pouco mais complicada por se tratar de um tipo que representa um caractere &lt;a href="https://home.unicode.org/"&gt;Unicode&lt;/a&gt;, de forma mais simples esse valor representa ''.&lt;/p&gt;

&lt;p&gt;Por último, podemos &lt;a href="https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/numeric-conversions#explicit-numeric-conversions"&gt;converter&lt;/a&gt; alguns tipos primitivos para outros, seja através de um &lt;strong&gt;casting&lt;/strong&gt;(explicitamente) ou de maneira implicita. Como regra, podemos assumir que a conversão de um tipo menor para um maior pode ser feita de maneira implícita, enquanto para converter tipos maiores em menores precisos deixar explicito para o compilador que sabemos o que estamos fazendo!&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RgHtMM4r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zgmtc2hw7o21mn1nyep1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RgHtMM4r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zgmtc2hw7o21mn1nyep1.png" alt="Image description" width="182" height="79"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Essa foi uma introdução aos tipos primitivos, espero que tenha sido claro para você!&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>beginners</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Como instalar o .NET</title>
      <dc:creator>Guilherme Pirani</dc:creator>
      <pubDate>Mon, 05 Sep 2022 18:46:12 +0000</pubDate>
      <link>https://dev.to/guilhermepirani/como-instalar-o-net-54bh</link>
      <guid>https://dev.to/guilhermepirani/como-instalar-o-net-54bh</guid>
      <description>&lt;p&gt;Nesse post vamos abordar como preparar seu ambiente de desenvolvimento .NET, instalando a versão mais recente de maneira rápida e prática, especialmente para quem está começando na programação com C#.&lt;/p&gt;

&lt;p&gt;Se você é usuário do Windows 10, saiba que por padrão você já tem o SDK (Software Development Kit) do .NET Framework 4.6 habilitado no seu sistema operacional. Isso quer dizer que basta abrir qualquer editor de texto para começar a escrever  e rodar código em C#. Porém, esse além de não ser o melhor dos ambientes para desenvolver suas aplicações, não fornece todas as ferramentas disponíveis em uma IDE (Integrated Development Environment). Para utilizar de todos os recursos disponíveis no .NET, baixaremos o Visual Studio, IDE da Microsoft voltada ao desenvolvimento .NET.&lt;/p&gt;

&lt;p&gt;Acesse o site do &lt;a href="https://visualstudio.microsoft.com/"&gt;Visual Studio&lt;/a&gt; e selecione o download da versão Community de acordo com seu sistema operacional. Essa é a versão grátis do programa.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R0wpHjHo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5womj7yd4fso8bajbnfx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R0wpHjHo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5womj7yd4fso8bajbnfx.png" alt="Image description" width="880" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O Visual Studio Code é uma outra opção que funciona também no Linux, mas ele não é uma IDE propriamente dita, ele é um editor de texto bem robusto com muitas opções de plugins. Aqui focaremos no Visual Studio Community 2022, disponível para Windows e Mac.&lt;/p&gt;

&lt;p&gt;Ao abrir o instalador, uma página é apresentada onde podemos escolher o que queremos instalar. Você pode escolher o que quiser, e no canto inferior será informado o tamanho em disco utilizado dependendo das suas escolhas. Visando tutoriais futuros, instalaremos os workloads do .NET Desktop, o ASP.NET, O Azure e o MAUI, conforme imagem, mas para o teste de hoje somente o Desktop já bastaria:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XYVGKBm3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vyhz73ro9q1ad3dvw5s7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XYVGKBm3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vyhz73ro9q1ad3dvw5s7.png" alt="Image description" width="880" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Na aba de Componentes Individuais, podemos ver o que está sendo instalado em detalhes. Aqui é onde podemos adicionar outras versões do .NET se for do interesse. Por padrão é instalada a última versão LTS, e assim deixaremos.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e612TobO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/exiq8upx3gd2jsz3gcgc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e612TobO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/exiq8upx3gd2jsz3gcgc.png" alt="Image description" width="880" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Na aba de linguagens podemos escolher em que línguas queremos a IDE disponível. E na última escolhemos onde tudo isso será salvo. Não é necessário alterar nada até aqui. Podemos concluir a instalação.&lt;/p&gt;

&lt;p&gt;Seu ambiente já está pronto! Super rápido. Agora, para fins de testes, escreveremos o famoso &lt;em&gt;Hello World&lt;/em&gt;.&lt;br&gt;
Abrindo o Visual Studio (é uma boa já acostumar a abri-lo sempre como administrador), selecionamos a opção "Criar Novo Projeto".&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_HYtqb6Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yollffpswrvx6kdv4opl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_HYtqb6Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yollffpswrvx6kdv4opl.png" alt="Image description" width="880" height="588"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como tipo do projeto, usaremos o Aplicativo de Console. Seguindo, podemos colocar qualquer nome na aplicação, que chamaremos de HelloWorld, e ao ser questionado sobre a versão do Framework, escolhemos a versão 6.0.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LwDmjHOi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c0cic9bqqyo92yqdx359.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LwDmjHOi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c0cic9bqqyo92yqdx359.png" alt="Image description" width="880" height="583"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por padrão, os projetos de Console já vem com o código para imprimir "Hello World" escrito. Então basta apertar F5 para rodar o projeto e garantirmos que está tudo funcionando!&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9eJjKcFI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5zo6z7uf3tdp3neiv9m4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9eJjKcFI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5zo6z7uf3tdp3neiv9m4.png" alt="Image description" width="880" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hoje finalizamos por aqui, um tutorial bem rápido que te deixa pronto para entrar no mundo do .NET!&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>csharp</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>.Net, ASP, Framework, Core, C#, Blazor, Razor: O que é tudo isso?</title>
      <dc:creator>Guilherme Pirani</dc:creator>
      <pubDate>Tue, 30 Aug 2022 20:41:55 +0000</pubDate>
      <link>https://dev.to/guilhermepirani/net-asp-framework-core-c-blazor-razor-o-que-e-tudo-isso-26po</link>
      <guid>https://dev.to/guilhermepirani/net-asp-framework-core-c-blazor-razor-o-que-e-tudo-isso-26po</guid>
      <description>&lt;p&gt;Calma! Não precisa se desesperar porque todos esses termos parecem confusos. Não é segredo para ninguém que o ecossistema da Microsoft tem algumas nomenclaturas complicadas, que as vezes confundem até quem já está na área a um tempo.&lt;/p&gt;

&lt;p&gt;Talvez essa imagem traga uma luz para que possamos começar nossa conversa:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_siyq387--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xljzs705qog1ruqsmlwn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_siyq387--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xljzs705qog1ruqsmlwn.png" alt="Image description" width="720" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Começando pelo mais fácil, o C# é uma das linguagens criadas pela Microsoft para o seu ecossistema de desenvolvimento. Essa linguagem tem uma longa história que cabe melhor em um outro post. Outros exemplos são o VB.NET e o F#, não tão utilizadas quanto o C#. Todas essas linguagens compartilham as mesmas bibliotecas, o que torna tudo muito robusto, e nos leva a falar sobre o .NET!&lt;/p&gt;

&lt;p&gt;O .NET é a plataforma de desenvolvimento da Microsoft, ela é mantida de forma Open Source no &lt;a href="https://github.com/dotnet/core/blob/main/Documentation/core-repos.md"&gt;GitHub&lt;/a&gt;. Como vimos na imagem ela inclui o runtime, os compiladores, as linguagens, e as bibliotecas que usamos para desenvolver. A grande sacada dela é essa unificação. &lt;/p&gt;

&lt;p&gt;A confusão começa com as atualizações ao .NET:&lt;/p&gt;

&lt;p&gt;Lançado em 2002 como .NET Framework, a plataforma atendia somente por esse nome até 2016. Quando foi lançado o .NET Core. A diferença entre os dois? A princípio o Framework atendia somente os sistemas Windows. Visando aumentar suas capacidades, o .NET Core expandia o Framework para outros sistemas operacionais. Não houve uma substituição a princípio, assim os usuários encontravam as duas plataformas no mercado ao mesmo tempo, em várias versões. Enquanto o .NET Framework estava na versão 4.7 por exemplo, tinhamos a versão 2.0 do .NET Core, e misturar os dois em um projeto não era algo muito simples. Levando a Microsoft a definir a .NET Standard como uma &lt;strong&gt;especificação&lt;/strong&gt; para que sua biblioteca fosse compativél com ambos.&lt;/p&gt;

&lt;p&gt;Essa confusão de versões, apesar de ainda estar presente hoje pela presença de sistemas legados, foi resolvida no final de 2020, quando foi lançado o .NET 5, dessa vez sem adições ao nome. &lt;br&gt;
O .NET 5 é a nova versão do .NET Core, mas talvez para passar a ideia de que o .NET Framework não foi simplesmente descontinuado, utilizou-se a versão 5, pulando a versão 4 (e retirando o Core do nome) de forma que se passa a impressão que ele é uma atualização do Framework. De qualquer forma, agora temos uma plataforma única que recebe uma grande atualização todos os anos adicionando cada vez ainda mais ferramentas, que atende simplesmente pelo nome de .NET (obrigado Microsoft).&lt;/p&gt;

&lt;p&gt;Agora falemos de coisas que estão dentro do .NET: Blazor, Razor, ASP.NET, MAUI, Xamarin, WinForms...&lt;/p&gt;

&lt;p&gt;Dessa vez começando por talvez o mais complicado, o ASP.NET sofre dos mesmo problemas de nomenclatura que o .NET, temos ASP.NET e ASP.NET Core, que é simplesmente uma nova versão lançada após o .NET Core existir e tentou aproximar as nomenclaturas. Porém, como se continuou a lançar novas versões do .NET Framework após a introdução do .NET Core, as primeiras versões do ASP.NET Core funcionavam tanto com o .NET Core quanto com essas novas versões do .NET Framework... Não entraremos aqui dentro do ASP com ASP.NET MVC e ASP.NET WebApi, saiba apenas que hoje tudo funciona junto (quase) sem problemas no ASP.NET Core, no .NET (Ufa!)&lt;/p&gt;

&lt;p&gt;O Blazor é um framework que permite a criação de páginas web interativas utilizando C# e Razor (sintaxe usada para adicionar o C# ao HTML) ao invés de Javascript. Basicamente, ambos o Blazor e o Razor se juntam para fornecer ao desenvolvedor uma forma de utilizar o C# no front-end. É importante não confundir com o Razor Pages, que é uma opção diferente ao ASP.NET Core MVC, utilizando rotas baseadas em páginas ao invés de controllers e views.&lt;br&gt;
Exemplo de C# com Razor (créditos ao &lt;a href="https://www.macoratti.net/11/02/asp_rzr1.htm"&gt;Macoratti&lt;/a&gt;):&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XO-vLxWh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rbvfpzcf6njwte90n0ok.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XO-vLxWh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rbvfpzcf6njwte90n0ok.png" alt="Image description" width="610" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Xamarin e Windows Forms também são ferramentas para criação de interfaces, focadas em Mobile e Desktop (Windows, duh!).&lt;/p&gt;

&lt;p&gt;Buscando outra vez atingir outros sistemas operacionais e seguindo outras tecnologias de desenvolvimento multi-plataforma que tem aparecido no mercado, a Microsoft lançou o MAUI (Multi-Platform App UI) como ferramenta onde um só código escrito em C# e XAML pelo desenvolvedor é compilado para rodar em iOS, Android, Windows e Mac, além de Linux e Web (junto ao Blazor). Ainda bem que não resolveram chamar de Xamarin Core.&lt;/p&gt;

&lt;p&gt;Essa foi uma visão geral dos principais nomes da plataforma de desenvolvimento da Microsoft, espero que tenha sido esclarecedor!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>csharp</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>Design Pattern: Factory Method</title>
      <dc:creator>Guilherme Pirani</dc:creator>
      <pubDate>Tue, 05 Apr 2022 20:52:56 +0000</pubDate>
      <link>https://dev.to/vaivoa/design-pattern-factory-method-5580</link>
      <guid>https://dev.to/vaivoa/design-pattern-factory-method-5580</guid>
      <description>&lt;p&gt;Os designs de criação, nos quais se inclui o Factory, são utilizados para criar objetos sem expor ao cliente a lógica pela qual aquele objeto é criado. Assim, as subclasses ligadas a uma interface ou classe abstrata podem ser instanciadas sem que o cliente se importe com o tipo específico do objeto sendo criado.&lt;/p&gt;

&lt;p&gt;De uma maneira mais prática, o diagrama abaixo é um exemplo de implementação de uma Factory:&lt;br&gt;
&lt;a href="https://media.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%2Fl84m586e14v1ejhael6q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fl84m586e14v1ejhael6q.png" alt="SAMPLE FACTORY UML"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pode parecer sem sentido o simples ato de levar o construtor de um objeto para uma outra parte do programa, mas é justamente esse pequeno ato que gera a abstração que queremos, algo extremamente benéfico quando se trata de grandes projetos. Assim podemos sobrescrever o método de criação em uma subclasse, alterando o objeto criado, não é necessário reescrevermos toda a lógica de criação para cada subclasse que quisermos adicionar ao nosso programa, aplicamos princípios SOLID em nosso código, geramos um baixo acoplamento e facilitamos a manutenção.&lt;/p&gt;

&lt;p&gt;Quando utilizar o Factory Method:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quando o cliente não sabe de antemão o tipo de objeto que deverá ser criado.&lt;/li&gt;
&lt;li&gt;Para permitir a extensão do código sem ter que realizar alterações em outras partes do projeto.&lt;/li&gt;
&lt;li&gt;Para eliminar duplicação de código na criação de objetos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Prós do Factory Method:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Evita acoplamento&lt;/li&gt;
&lt;li&gt;Facilita Manutenção&lt;/li&gt;
&lt;li&gt;Responsabilidade única (&lt;a href="https://en.wikipedia.org/wiki/SOLID#:~:text=In%20software%20engineering%2C%20SOLID%20is,engineer%20and%20instructor%20Robert%20C." rel="noopener noreferrer"&gt;SOLID&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Aberto/Fechado (&lt;a href="https://en.wikipedia.org/wiki/SOLID#:~:text=In%20software%20engineering%2C%20SOLID%20is,engineer%20and%20instructor%20Robert%20C." rel="noopener noreferrer"&gt;SOLID&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contras do Factory Method:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Os produtos para serem retornados precisam ter uma classe ou interface base em comum.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Gera uma grande quantidade de classes no seu projeto.&lt;/em&gt; No entanto cabe aqui uma observação: é responsabilidade do desenvolvedor considerar os trade-offs daquilo que ele implementa. Nesse caso da quantidade de classes, podemos abrir mão de um pró do Factory de forma a diminuir a quantidade de classes, porém aumentando o acoplamento do código (usando switch case na Factory por exemplo, transformando o padrão em um Simple Factory)&lt;/li&gt;
&lt;li&gt;Outros patterns podem oferecer mais flexibilidade, como Builder e Prototype, porém trazendo maior complexidade. Assim muitos projetos iniciam utilizando Factory e depois migram para outros design patterns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para um tutorial prático de como aplicar o Factory Method &lt;a href="https://vaivoa.github.io/factory-method-design-pattern/" rel="noopener noreferrer"&gt;CLIQUE AQUI&lt;/a&gt;.&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__754899"&gt;
    &lt;a href="/guilhermepirani" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F754899%2F4149c1ee-686f-4a12-b0d5-0111b52bb86d.png" alt="guilhermepirani image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/guilhermepirani"&gt;Guilherme Pirani&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/guilhermepirani"&gt;Developer | Microsoft Learn Student Ambassador | AZ-900 | DP-900 | SC-900&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.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%2Fn8bndcx2jkn1jz1dy98v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fn8bndcx2jkn1jz1dy98v.png" alt="linha horizontal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Disclaimer
&lt;/h1&gt;

&lt;p&gt;A VaiVoa incentiva seus Desenvolvedores em seu processo de crescimento e aceleração técnica. Os artigos publicados não traduzem a opinião da VaiVoa. A publicação obedece ao propósito de estimular o debate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F1wmziqv74ghhgyi9p0om.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F1wmziqv74ghhgyi9p0om.png" alt="logo vaivoa"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>tutorial</category>
      <category>architecture</category>
      <category>oop</category>
    </item>
  </channel>
</rss>
