<?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: Lucas Mancini</title>
    <description>The latest articles on DEV Community by Lucas Mancini (@lmancini).</description>
    <link>https://dev.to/lmancini</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%2F1072186%2F6e9f993a-7b9e-4632-b012-40c06de24194.jpeg</url>
      <title>DEV Community: Lucas Mancini</title>
      <link>https://dev.to/lmancini</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lmancini"/>
    <language>en</language>
    <item>
      <title>Views no DRF: Funções ou classes? A escolha simples</title>
      <dc:creator>Lucas Mancini</dc:creator>
      <pubDate>Sun, 15 Sep 2024 12:57:05 +0000</pubDate>
      <link>https://dev.to/lmancini/views-no-drf-funcoes-ou-classes-a-escolha-simples-4jge</link>
      <guid>https://dev.to/lmancini/views-no-drf-funcoes-ou-classes-a-escolha-simples-4jge</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Você já se perguntou qual a melhor maneira de criar as views nas suas APIs com Django Rest Framework (DRF)? Existem duas abordagens principais: &lt;strong&gt;Function-Based Views (FBVs)&lt;/strong&gt; e &lt;strong&gt;Class-Based Views (CBVs)&lt;/strong&gt;. Cada uma tem suas vantagens e desvantagens, e a escolha da melhor opção vai depender do seu projeto e estilo de codificação.&lt;/p&gt;

&lt;p&gt;Vamos dar uma olhada mais de perto em cada uma delas para te ajudar a tomar a melhor decisão.&lt;/p&gt;

&lt;h2&gt;
  
  
  Function-Based Views (FBVs)
&lt;/h2&gt;

&lt;p&gt;Os FBVs são a abordagem mais simples e intuitiva para quem já está familiarizado com o Django. Eles são basicamente funções Python que recebem uma requisição HTTP e retornam uma resposta.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vantagens:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simples e direto:&lt;/strong&gt;&lt;br&gt;
A lógica da view é toda contida em uma única função, o que facilita a compreensão.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Menos código:&lt;/strong&gt;&lt;br&gt;
Em alguns casos, os FBVs podem exigir menos código do que os CBVs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Desvantagens:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Repetetitivo:&lt;/strong&gt;&lt;br&gt;
A lógica de autenticação, permissões e outras tarefas comuns pode ser repetida em várias views.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dificuldade em reutilizar código:&lt;/strong&gt;&lt;br&gt;
É mais difícil criar componentes reutilizáveis com FBVs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Class-Based Views (CBVs)
&lt;/h2&gt;

&lt;p&gt;Os CBVs são classes Python que herdam de classes base fornecidas pelo DRF. Eles oferecem uma estrutura mais organizada e reutilizável para criar views.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vantagens:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reutilizável:&lt;/strong&gt;&lt;br&gt;
As CBVs podem ser facilmente customizadas e reutilizadas em diferentes partes do seu projeto.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Organizado:&lt;/strong&gt;&lt;br&gt;
A separação de responsabilidades entre a view e os mixins torna o código mais organizado e fácil de manter.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Funcionalidades prontas:&lt;/strong&gt;&lt;br&gt;
O DRF oferece diversos mixins que implementam funcionalidades comuns, como listagem, criação, atualização e deleção de objetos.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Desvantagens:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Curva de aprendizado:&lt;/strong&gt;&lt;br&gt;
Pode ser um pouco mais difícil de entender para quem está começando com o DRF.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mais verboso:&lt;/strong&gt;&lt;br&gt;
Em alguns casos, os CBVs podem exigir mais código do que os FBVs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quando usar cada um?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;FBVs:&lt;/strong&gt;&lt;br&gt;
Projetos pequenos e simples.&lt;br&gt;
Quando a prioridade é rapidez de desenvolvimento.&lt;br&gt;
Para quem prefere uma abordagem mais procedural.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CBVs:&lt;/strong&gt;&lt;br&gt;
Projetos grandes e complexos.&lt;br&gt;
Quando a reutilização de código é importante.&lt;br&gt;
Para quem prefere uma abordagem mais orientada a objetos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;A escolha entre FBVs e CBVs é uma questão de preferência pessoal e das necessidades do seu projeto. Ambos os tipos de views têm seus próprios benefícios e desvantagens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recomendações:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Se você está começando com o DRF, os FBVs podem ser uma boa maneira de se familiarizar com a framework. No entanto, à medida que seu projeto cresce, os CBVs se tornam cada vez mais vantajosos, graças à sua organização e reutilização.&lt;/p&gt;

&lt;h2&gt;
  
  
  Em resumo:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;FBVs:&lt;/strong&gt; Simples, direto, menos código.&lt;br&gt;
&lt;strong&gt;CBVs:&lt;/strong&gt; Reutilizável, organizado, funcionalidades prontas.&lt;/p&gt;

&lt;p&gt;Escolha a abordagem que melhor se adapta ao seu estilo de codificação e às necessidades do seu projeto!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Saiba mais:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.django-rest-framework.org/api-guide/views/#function-based-views" rel="noopener noreferrer"&gt;FBV Documentation&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.django-rest-framework.org/api-guide/generic-views/" rel="noopener noreferrer"&gt;CBV Documentation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;#DjangoRESTFramework #DRF #FBV #CBV #Python&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Desvendando o Factory Design Pattern</title>
      <dc:creator>Lucas Mancini</dc:creator>
      <pubDate>Tue, 16 Jan 2024 11:59:43 +0000</pubDate>
      <link>https://dev.to/lmancini/desvendando-o-factory-design-pattern-em-projetos-java-2n2j</link>
      <guid>https://dev.to/lmancini/desvendando-o-factory-design-pattern-em-projetos-java-2n2j</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;O que é o Factory Design Pattern?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Em termos simples, o Factory Design Pattern é uma técnica que visa delegar a responsabilidade de criação de objetos para uma classe separada, conhecida como a fábrica. Isso ajuda a desacoplar a criação do objeto do seu uso, promovendo um código mais flexível e fácil de manter.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Por que usar o Factory Design Pattern?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Imagine que você está construindo um carro. Em vez de ter que entender todos os detalhes específicos de como cada parte é fabricada, você confia em uma fábrica que se encarrega desse processo. Da mesma forma, o Factory Design Pattern permite que seu código se concentre no uso dos objetos, enquanto a fábrica cuida da criação deles.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Componentes-chave do Factory Design Pattern:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Interface ou Classe Abstrata:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define a estrutura geral do objeto que será criado.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Concrete Classes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implementam a interface ou herdam da classe abstrata, fornecendo a implementação específica do objeto.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Factory Interface ou Classe Abstrata de Fábrica:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Declara o método de criação do objeto.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Concrete Factory Classes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implementam o método de criação, instanciando e retornando o objeto desejado.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Exemplo prático:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Suponha que você tenha um sistema de gestão de restaurantes e precise criar diferentes tipos de pratos. Utilizando o &lt;strong&gt;Factory Design Pattern&lt;/strong&gt;, você teria uma interface Prato e várias classes concretas que implementam essa interface, como &lt;strong&gt;&lt;code&gt;PratoMassa&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;PratoPeixe&lt;/code&gt;&lt;/strong&gt;, etc. A fábrica correspondente (&lt;strong&gt;&lt;code&gt;FabricaPratos&lt;/code&gt;&lt;/strong&gt;) ficaria responsável por criar esses pratos de acordo com a necessidade.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Vantagens do Factory Design Pattern:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;- Desacoplamento:&lt;/strong&gt; Separar a criação do objeto do seu uso, facilitando modificações e expansões.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Manutenção:&lt;/strong&gt; Facilita a manutenção do código, uma vez que as mudanças na criação do objeto são isoladas na fábrica.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Legibilidade:&lt;/strong&gt; Torna o código mais legível e compreensível, pois concentra a lógica de criação em um local específico.  &lt;/p&gt;

&lt;p&gt;Em resumo, o Factory Design Pattern é uma ferramenta poderosa para simplificar a criação de objetos em projetos Java. Ao adotar esse padrão, você estará construindo um código mais flexível, modular e fácil de entender. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Texto gerado por IA&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>java</category>
      <category>beginners</category>
      <category>designpatterns</category>
    </item>
    <item>
      <title>DTO Layer em uma API</title>
      <dc:creator>Lucas Mancini</dc:creator>
      <pubDate>Wed, 24 May 2023 13:49:53 +0000</pubDate>
      <link>https://dev.to/lmancini/dto-layer-em-uma-api-1d5e</link>
      <guid>https://dev.to/lmancini/dto-layer-em-uma-api-1d5e</guid>
      <description>&lt;h2&gt;
  
  
  Definição
&lt;/h2&gt;

&lt;p&gt;A camada DTO (Data Transfer Object) em uma API (Application Programming Interface) é um conceito usado para transferir dados entre diferentes camadas ou componentes de um aplicativo. Ele atua como um contêiner ou uma estrutura de dados que encapsula os dados que estão sendo transferidos, fornecendo um formato padronizado para comunicação entre diferentes partes do aplicativo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Objetivos
&lt;/h2&gt;

&lt;p&gt;O principal objetivo de usar uma camada DTO em uma API é desacoplar a representação interna dos dados de sua representação externa. Em outras palavras, a camada DTO ajuda a separar o modelo de domínio interno ou modelo de dados da representação desses dados quando expostos por meio de uma API.&lt;/p&gt;

&lt;p&gt;Aqui estão alguns motivos para usar uma camada DTO em um aplicativo:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Encapsulamento e Abstração: DTOs fornecem uma maneira de encapsular dados relacionados e apresentá-los de maneira estruturada, ocultando os detalhes internos da implementação. Ele ajuda a abstrair a complexidade do modelo de dados subjacente e a apresentar uma visão simplificada dos dados aos consumidores da API.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Transformação de dados: A camada DTO permite a transformação de dados e mapeamento entre diferentes representações ou formatos. Por exemplo, ele pode converter dados de uma entidade de banco de dados em um formato adequado para respostas de API ou pode transformar dados recebidos de solicitações de API em um formato compatível com o modelo de dados interno do aplicativo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Versão e compatibilidade futura: as APIs geralmente evoluem com o tempo, e as alterações no modelo de dados subjacente podem interromper os clientes de API existentes que dependem de estruturas de dados específicas. Ao usar uma camada DTO, você pode introduzir alterações no modelo de dados interno sem afetar a interface externa da API. Você pode criar novos DTOs ou modificar os existentes para dar suporte ao controle de versão e manter a compatibilidade com versões anteriores com clientes de API existentes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Segurança e validação: DTOs podem ajudar a impor regras de validação de dados e restrições de segurança, fornecendo uma camada separada para validação de entrada. Eles permitem que você defina tipos de dados específicos, restrições e lógica de validação para garantir que apenas dados válidos e esperados sejam aceitos pela API.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Otimização de desempenho: Em alguns casos, o modelo de dados interno pode conter mais informações do que as que precisam ser expostas por meio da API. Ao usar DTOs, você pode incluir ou excluir seletivamente determinados campos de dados, otimizando o tamanho da carga útil e melhorando o desempenho de sua API, reduzindo a transferência desnecessária de dados.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No geral, a camada DTO em uma API serve como uma camada intermediária que facilita a comunicação entre diferentes partes de um aplicativo, fornecendo um formato padronizado para transferência de dados, abstração, transformação e compatibilidade. Ele ajuda a manter uma separação clara entre o modelo de dados interno e a representação da API externa, melhorando a flexibilidade geral, escalabilidade e capacidade de manutenção do aplicativo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Sim, usar uma camada DTO em uma API geralmente é considerado uma boa prática no desenvolvimento de software, especialmente em aplicativos maiores e mais complexos. Aqui estão algumas razões pelas quais é recomendado:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Separação de preocupações: a camada DTO ajuda a separar as preocupações do modelo de dados interno e a representação externa da API. Ele promove um limite claro entre as diferentes partes do aplicativo e permite uma melhor modularização e manutenção.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Flexibilidade e adaptabilidade: ao usar DTOs, você pode adaptar a estrutura de dados da API para atender às necessidades específicas dos consumidores da API sem afetar o modelo de dados subjacente. Essa flexibilidade permite que você faça alterações na implementação interna sem interromper os clientes da API existente, facilitando a evolução e a escalabilidade da sua API.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Segurança e validação aprimoradas: a camada DTO fornece um local dedicado para validação de entrada e verificações de segurança. Você pode impor regras de validação específicas, limpar entradas e aplicar medidas de segurança antes de processar os dados. Isso ajuda a prevenir vulnerabilidades de segurança e garantir a integridade da API.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Desempenho aprimorado: com DTOs, você tem controle sobre os dados transferidos por meio da API. Você pode otimizar o tamanho da carga incluindo apenas os campos necessários, reduzindo o uso da largura de banda e melhorando o desempenho geral da sua API. Além disso, você pode aproveitar técnicas como agregação e paginação de dados para otimizar a recuperação de dados.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Melhor documentação e consistência da API: DTOs ajudam a documentar a estrutura de dados da API e fornecem uma interface consistente para os consumidores. Ao definir explicitamente os objetos de transferência de dados, fica mais fácil para os desenvolvedores entender o contrato da API, levando a uma melhor comunicação e reduzindo possíveis problemas de integração.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Testabilidade e capacidade de manutenção: os DTOs facilitam o teste da API, fornecendo estruturas claras de entrada e saída. Eles simplificam a simulação ou geração de dados de teste e validam as respostas da API. Além disso, a separação entre a camada DTO e a implementação interna aumenta a capacidade de manutenção, pois as alterações no modelo de dados subjacente podem ser isoladas da interface da API.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Embora o uso de uma camada DTO adicione algum nível de complexidade à arquitetura do aplicativo, os benefícios que ela oferece em termos de desacoplamento, flexibilidade, segurança, desempenho e capacidade de manutenção a tornam uma prática recomendada, especialmente no contexto da criação de APIs robustas e escaláveis.&lt;/p&gt;

&lt;h4&gt;
  
  
  Referências
&lt;/h4&gt;

&lt;p&gt;Texto gerado através do ChatGPT&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Onboard</title>
      <dc:creator>Lucas Mancini</dc:creator>
      <pubDate>Wed, 26 Apr 2023 22:05:45 +0000</pubDate>
      <link>https://dev.to/lmancini/onboard-380g</link>
      <guid>https://dev.to/lmancini/onboard-380g</guid>
      <description>&lt;p&gt;Welcome! I'm thrilled to be joining this community as a beginner software developer, and I'm excited to share my journey with you.&lt;/p&gt;

&lt;p&gt;As I start developing my skills, it's essential to document my progress and reflect on my experiences. That's why I'll be using this platform as my learning logbook, where I can share my thoughts, challenges, and achievements with you.&lt;/p&gt;

&lt;p&gt;My goal is to record and share knowledge, and get feedback on my work. Through my posts, I hope to inspire others, learn from your experiences, and celebrate our accomplishments together.&lt;/p&gt;

&lt;p&gt;Whether you're a beginner or an expert, I invite you to join me on this exciting journey. Let's learn, grow, and build great things together!&lt;/p&gt;

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