{"id":52312,"date":"2025-03-11T12:30:00","date_gmt":"2025-03-11T15:30:00","guid":{"rendered":"https:\/\/www.locaweb.com.br\/blog\/?p=52312"},"modified":"2025-03-10T16:16:41","modified_gmt":"2025-03-10T19:16:41","slug":"modular-monolith-architecture-o-que-e-e-como-colocar-em-pratica","status":"publish","type":"post","link":"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/modular-monolith-architecture-o-que-e-e-como-colocar-em-pratica\/","title":{"rendered":"Modular Monolith Architecture: o que \u00e9 e como colocar em pr\u00e1tica\u00a0"},"content":{"rendered":"\n<p class=\"has-text-align-center\"><em>Entenda o significado de Modular Monolith Architecture e aprenda a aplic\u00e1-la para garantir um desenvolvimento \u00e1gil com estabilidade e escalabilidade.<\/em>&nbsp;<\/p>\n\n\n\n<p>A arquitetura de software \u00e9 um dos pilares fundamentais para o sucesso de qualquer projeto de desenvolvimento. E entre as diversas abordagens dispon\u00edveis, a <strong>Modular Monolith Architecture<\/strong> \u2014 que pode ser compreendida como Arquitetura Monolito Modular, em tradu\u00e7\u00e3o livre \u2014 tem ganhado destaque por combinar a simplicidade de um monolito com a modularidade de microsservi\u00e7os.&nbsp;&nbsp;<\/p>\n\n\n\n<p>A seguir, entenda o que \u00e9 essa arquitetura de software, seus benef\u00edcios e como coloc\u00e1-la em pr\u00e1tica utilizando .NET Core 9 com C#.&nbsp;<\/p>\n\n\n\n<p>Boa leitura!&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O que \u00e9 Modular Monolith Architecture?&nbsp;<\/h2>\n\n\n\n<p>A Modular Monolith Architecture \u00e9 uma <strong>abordagem de <\/strong><a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/design-de-software\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>design de software<\/strong><\/a> que organiza o c\u00f3digo em m\u00f3dulos independentes, mas que ainda residem em uma base e s\u00e3o implantados como uma unidade. Cada m\u00f3dulo \u00e9 respons\u00e1vel por uma funcionalidade espec\u00edfica do sistema, como gerenciamento de usu\u00e1rios, processamento de pedidos ou relat\u00f3rios.&nbsp;<\/p>\n\n\n\n<p>Essa arquitetura promove a separa\u00e7\u00e3o de preocupa\u00e7\u00f5es, facilitando manuten\u00e7\u00e3o, testes e evolu\u00e7\u00e3o do sistema. <strong>A Modular Monolith Architecture incentiva a cria\u00e7\u00e3o de m\u00f3dulos bem definidos com depend\u00eancias m\u00ednimas entre si<\/strong>, ao contr\u00e1rio de um monolito tradicional, em que o c\u00f3digo \u00e9 frequentemente entrela\u00e7ado.&nbsp;<\/p>\n\n\n\n<p>E para deixar a compreens\u00e3o ainda mais f\u00e1cil, entenda a seguir alguns conceitos fundamentais desse m\u00e9todo de desenvolvimento:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Monolito modular<\/strong>: um sistema \u00fanico, mas que \u00e9 dividido em m\u00f3dulos internos que encapsulam funcionalidades espec\u00edficas, como o m\u00f3dulo de usu\u00e1rios.\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Baixo acoplamento<\/strong>: os m\u00f3dulos s\u00e3o projetados para depender o m\u00ednimo poss\u00edvel uns dos outros, facilitando a manuten\u00e7\u00e3o e a evolu\u00e7\u00e3o do sistema.\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Alta coes\u00e3o<\/strong>: cada m\u00f3dulo \u00e9 respons\u00e1vel por uma \u00e1rea de neg\u00f3cio ou funcionalidade, seguindo o princ\u00edpio da responsabilidade \u00fanica.\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Comunica\u00e7\u00e3o interna<\/strong>: a intera\u00e7\u00e3o entre os m\u00f3dulos ocorre por meio de <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/padroes-e-principios-para-desenvolvimento-de-interfaces\/\" target=\"_blank\" rel=\"noreferrer noopener\">interfaces<\/a> bem definidas, chamadas de m\u00e9todos ou eventos internos.\u00a0<\/li>\n<\/ul>\n\n\n\n<p><strong>Leia mais:<\/strong>&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/linguagens-de-programacao-mais-usadas\/\" target=\"_blank\" rel=\"noreferrer noopener\">Linguagem de programa\u00e7\u00e3o: as 10 mais populares em 2024<\/a>\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/full-stack-front-end-e-back-end-quais-sao-as-diferencas\/\" target=\"_blank\" rel=\"noreferrer noopener\">Full stack, front-end e back-end: quais s\u00e3o as diferen\u00e7as?<\/a>\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/arquitetura-de-software\/\" target=\"_blank\" rel=\"noreferrer noopener\">Arquitetura de software: por que ela \u00e9 t\u00e3o importante?<\/a>\u00a0<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Compara\u00e7\u00e3o com outras arquiteturas&nbsp;<\/h3>\n\n\n\n<p>Ao comparar com o <strong>monolito tradicional<\/strong>, a vantagem da Modular Monolith Architecture \u00e9 a simplicidade de desenvolvimento, deploy \u00fanico e facilidade de <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/debug\/\" target=\"_blank\" rel=\"noreferrer noopener\">debug<\/a>. J\u00e1 a principal desvantagem \u00e9 seu acoplamento alto, dificuldade de escalar partes espec\u00edficas do sistema e manuten\u00e7\u00e3o complexa \u00e0 medida que cresce.&nbsp;<\/p>\n\n\n\n<p>Em rela\u00e7\u00e3o a <strong>microservices<\/strong>, a Modular Monolith Architecture tem escalabilidade independente, flexibilidade tecnol\u00f3gica e facilidade de manuten\u00e7\u00e3o em sistemas grandes e complexos. Por\u00e9m, h\u00e1 uma maior lat\u00eancia na comunica\u00e7\u00e3o entre servi\u00e7os e desafios na consist\u00eancia de dados.&nbsp;<\/p>\n\n\n\n<p>Por fim, a <strong>modular monolith<\/strong> combina a simplicidade do monolito com a organiza\u00e7\u00e3o dos microservices, facilitando a evolu\u00e7\u00e3o para essa \u00faltima no futuro, caso seja necess\u00e1rio. No entanto, requer disciplina no design para evitar acoplamento excessivo entre m\u00f3dulos.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Modular Monolith Architecture vs Microservices&nbsp;<\/h2>\n\n\n\n<p>Uma das grandes d\u00favidas para devs em geral que desejam utilizar essa arquitetura est\u00e1 relacionada aos <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/api-e-microsservico-diferencas\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>microsservi\u00e7os<\/strong><\/a>. Por isso, vamos aprofundar ainda mais este t\u00f3pico. Enquanto os <strong>microservices<\/strong> dividem a aplica\u00e7\u00e3o em servi\u00e7os independentes que podem ser implantados e escalados separadamente, como dito anteriormente, a Modular Monolith Architecture mant\u00e9m a aplica\u00e7\u00e3o como uma unidade que possui uma estrutura interna modular.&nbsp;<\/p>\n\n\n\n<p><strong>A principal diferen\u00e7a entre ambas as arquiteturas est\u00e1 na complexidade operacional<\/strong>. Os microsservi\u00e7os exigem infraestrutura para gerenciar comunica\u00e7\u00e3o entre servi\u00e7os, balanceamento de carga, monitoramento etc. J\u00e1 a Modular Monolith Architecture simplifica essa opera\u00e7\u00e3o, pois todos os m\u00f3dulos s\u00e3o executados ao mesmo tempo.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Quando adotar essa abordagem&nbsp;<\/h3>\n\n\n\n<p>A Modular Monolith Architecture \u00e9 ideal em cen\u00e1rios como <strong>projetos em crescimento<\/strong>, quando voc\u00ea precisa de uma arquitetura organizada, mas ainda n\u00e3o justifica a complexidade dos microservices.&nbsp;<\/p>\n\n\n\n<p>Outro fator para considerar usar esse modelo de desenvolvimento est\u00e1 relacionado a <strong>equipes pequenas ou com recursos limitados<\/strong>. Isso porque a Modular Monolith Architecture facilita o processo de cria\u00e7\u00e3o e o <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/o-que-e-deploy-automatico-e-quais-sao-as-vantagens\/\" target=\"_blank\" rel=\"noreferrer noopener\">deploy<\/a> sem demandar uma infraestrutura complexa.&nbsp;<\/p>\n\n\n\n<p>Por fim, vale aplicar essa arquitetura quando se trata de <strong>sistemas com dom\u00ednios bem definidos<\/strong>. Nesse caso, a medida pode ser adotada quando o problema pode ser dividido em \u00e1reas de responsabilidade distintas.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Quando a arquitetura pode n\u00e3o ser a melhor escolha&nbsp;<\/h3>\n\n\n\n<p>Apesar de suas vantagens, a Modular Monolith Architecture n\u00e3o \u00e9 adequada para todos os cen\u00e1rios. Aqui est\u00e3o algumas situa\u00e7\u00f5es em que outras abordagens podem ser mais indicadas:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Sistemas altamente distribu\u00eddos<\/strong>: se o sistema precisa ser implantado em diferentes regi\u00f5es geogr\u00e1ficas ou em ambientes com requisitos de escalabilidade extrema, os microservices podem ser mais adequados.\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Equipes grandes e distribu\u00eddas<\/strong>: em organiza\u00e7\u00f5es com muitas equipes trabalhando de forma independente, a complexidade de coordenar o desenvolvimento em um \u00fanico monolito pode ser maior.\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Tecnologias heterog\u00eaneas<\/strong>: caso diferentes partes do sistema precisarem ser desenvolvidas com tecnologias ou linguagens completamente diferentes, os microservices oferecem mais flexibilidade.\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Projetos pequenos ou de curta dura\u00e7\u00e3o<\/strong>: para sistemas simples ou de vida \u00fatil limitada, a complexidade adicional de modularizar o monolito pode n\u00e3o justificar o esfor\u00e7o.\u00a0<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Quais s\u00e3o os benef\u00edcios da Modular Monolith Architecture?\u00a0<\/h3>\n\n\n\n<p>Ao todo, s\u00e3o cinco as vantagens em adotar esse modelo de arquitetura de software em seus projetos:&nbsp;<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Simplicidade operacional<\/strong>: como a aplica\u00e7\u00e3o \u00e9 implantada como uma unidade, n\u00e3o h\u00e1 necessidade de gerenciar m\u00faltiplos servi\u00e7os ou infraestrutura complexa.\u00a0<\/li>\n<\/ol>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Facilidade de desenvolvimento<\/strong>: desenvolvedores podem trabalhar em m\u00f3dulos espec\u00edficos sem se preocupar com o impacto em outras partes do sistema.\u00a0<\/li>\n<\/ol>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Manuten\u00e7\u00e3o simplificada<\/strong>: a separa\u00e7\u00e3o em m\u00f3dulos facilita a identifica\u00e7\u00e3o e corre\u00e7\u00e3o de <a href=\"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/voce-consegue-prever-os-bugs-de-sua-aplicacao\/\" target=\"_blank\" rel=\"noreferrer noopener\">bugs<\/a>, al\u00e9m de permitir atualiza\u00e7\u00f5es pontuais.\u00a0<\/li>\n<\/ol>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>Escalabilidade<\/strong>: embora a aplica\u00e7\u00e3o seja um monolito, m\u00f3dulos cr\u00edticos podem ser otimizados ou escalados separadamente, se necess\u00e1rio.\u00a0<\/li>\n<\/ol>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li><strong>Transi\u00e7\u00e3o para microsservi\u00e7os<\/strong>: se no futuro a aplica\u00e7\u00e3o precisar evoluir para microsservi\u00e7os, a modularidade j\u00e1 existente facilita essa transi\u00e7\u00e3o.\u00a0<\/li>\n<\/ol>\n\n\n\n<p>A Modular Monolith Architecture \u00e9 uma abordagem que oferece o melhor dos dois mundos: <strong>a simplicidade e a facilidade de deploy de um monolito tradicional, combinadas com a organiza\u00e7\u00e3o e a escalabilidade de uma arquitetura modular<\/strong>. Essa jun\u00e7\u00e3o a torna uma escolha ideal para projetos que precisam crescer de forma sustent\u00e1vel, sem a complexidade operacional dos microservices.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Arquitetura de software: por onde come\u00e7ar? | Locaweb\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/O6dQ48wlxt8?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Quer aprender na pr\u00e1tica? Confira o passo a passo de um projeto em Modular Monolith Architecture\u00a0<\/h2>\n\n\n\n<p>Agora que voc\u00ea j\u00e1 conhece os conceitos e benef\u00edcios, vamos colocar a m\u00e3o na massa! Quer aprender a criar um <strong>projeto b\u00e1sico em .NET Core 9 com C# utilizando Modular Monolith Architecture<\/strong>? \u00c9 s\u00f3 conferir as seguintes camadas:&nbsp;<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Domain<\/strong>: cont\u00e9m as entidades e regras de neg\u00f3cio.\u00a0<\/li>\n<\/ol>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Application<\/strong>: implementa a l\u00f3gica de aplica\u00e7\u00e3o e orquestra\u00e7\u00e3o.\u00a0<\/li>\n<\/ol>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Infrastructure<\/strong>: respons\u00e1vel pela persist\u00eancia de dados e integra\u00e7\u00f5es externas.\u00a0<\/li>\n<\/ol>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>Presentation<\/strong>: camada de interface com o usu\u00e1rio (API ou UI).\u00a0<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Passo a passo: criando o projeto&nbsp;<\/h3>\n\n\n\n<p>Primeiro, \u00e9 preciso <strong>criar uma solu\u00e7\u00e3o .NET Core<\/strong>:&nbsp;<\/p>\n\n\n\n<p><em>dotnet new sln -n ModularMonolith<\/em>&nbsp;<\/p>\n\n\n\n<p>Em seguida, <strong>desenvolva os projetos para cada camada<\/strong>, desta forma:&nbsp;<\/p>\n\n\n\n<p><em>dotnet new classlib -n Domain<\/em>&nbsp;<\/p>\n\n\n\n<p><em>dotnet new classlib -n Application<\/em>&nbsp;<\/p>\n\n\n\n<p><em>dotnet new classlib -n Infrastructure<\/em>&nbsp;<\/p>\n\n\n\n<p><em>dotnet new webapi -n Presentation<\/em>&nbsp;<\/p>\n\n\n\n<p>\u00c9 a\u00ed que \u00e9 poss\u00edvel <strong>adicionar os projetos \u00e0 solu\u00e7\u00e3o<\/strong>, deste modo:&nbsp;<\/p>\n\n\n\n<p><em>dotnet sln add Domain<\/em>&nbsp;<\/p>\n\n\n\n<p><em>dotnet sln add Application<\/em>&nbsp;<\/p>\n\n\n\n<p><em>dotnet sln add Infrastructure<\/em>&nbsp;<\/p>\n\n\n\n<p><em>dotnet sln add Presentation<\/em>&nbsp;<\/p>\n\n\n\n<p>Por fim, <strong>configure as depend\u00eancias entre os projetos<\/strong>. Mas, aten\u00e7\u00e3o, \u00e9 preciso considerar que:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Application depende de Domain.\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Infrastructure depende de Domain e Application.\u00a0<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Presentation depende de Application e Infrastructure.\u00a0<\/li>\n<\/ul>\n\n\n\n<p>Ponto entendido? Ent\u00e3o, basta usar os comandos abaixo para <strong>adicionar as refer\u00eancias<\/strong>:&nbsp;<\/p>\n\n\n\n<p><em>dotnet add Application reference Domain<\/em>&nbsp;<\/p>\n\n\n\n<p><em>dotnet add Infrastructure reference Domain Application<\/em>&nbsp;<\/p>\n\n\n\n<p><em>dotnet add Presentation reference Application Infrastructure<\/em>&nbsp;<\/p>\n\n\n\n<p>Codifica\u00e7\u00e3o b\u00e1sica de todas as camadas&nbsp;<\/p>\n\n\n\n<p>Inicialmente, em <strong>Domain<\/strong>, crie uma entidade simples, como Product, no projeto Domain:&nbsp;<\/p>\n\n\n\n<p><em>namespace Domain.Entities<\/em>&nbsp;<\/p>\n\n\n\n<p><em>{<\/em>&nbsp;<\/p>\n\n\n\n<p><em>public class Product<\/em>&nbsp;<\/p>\n\n\n\n<p><em>{<\/em>&nbsp;<\/p>\n\n\n\n<p><em>public int Id { get; set; }<\/em>&nbsp;<\/p>\n\n\n\n<p><em>public string Name { get; set; }<\/em>&nbsp;<\/p>\n\n\n\n<p><em>public decimal Price { get; set; }<\/em>&nbsp;<\/p>\n\n\n\n<p><em>}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>}<\/em>&nbsp;<\/p>\n\n\n\n<p>Depois, em <strong>Application<\/strong>, elabore um servi\u00e7o para gerenciar produtos no projeto nele:&nbsp;<\/p>\n\n\n\n<p><em>using Domain.Entities;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>namespace Application.Services<\/em>&nbsp;<\/p>\n\n\n\n<p><em>{<\/em>&nbsp;<\/p>\n\n\n\n<p><em>public interface IProductService<\/em>&nbsp;<\/p>\n\n\n\n<p><em>{<\/em>&nbsp;<\/p>\n\n\n\n<p><em>Product GetProductById(int id);<\/em>&nbsp;<\/p>\n\n\n\n<p><em>}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>public class ProductService : IProductService<\/em>&nbsp;<\/p>\n\n\n\n<p><em>{<\/em>&nbsp;<\/p>\n\n\n\n<p><em>public Product GetProductById(int id)<\/em>&nbsp;<\/p>\n\n\n\n<p><em>{<\/em>&nbsp;<\/p>\n\n\n\n<p><em>\/\/ Simula\u00e7\u00e3o de busca no banco de dados<\/em>&nbsp;<\/p>\n\n\n\n<p><em>return new Product { Id = id, Name = &#8220;Sample Product&#8221;, Price = 99.99m };<\/em>&nbsp;<\/p>\n\n\n\n<p><em>}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>}<\/em>&nbsp;<\/p>\n\n\n\n<p>J\u00e1 em <strong>Infrastructure<\/strong>, configure o acesso a dados no projeto. Aqui, usaremos um reposit\u00f3rio simples:&nbsp;<\/p>\n\n\n\n<p><em>using Domain.Entities;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>using Application.Services;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>namespace Infrastructure.Repositories<\/em>&nbsp;<\/p>\n\n\n\n<p><em>{<\/em>&nbsp;<\/p>\n\n\n\n<p><em>public class ProductRepository : IProductService<\/em>&nbsp;<\/p>\n\n\n\n<p><em>{<\/em>&nbsp;<\/p>\n\n\n\n<p><em>public Product GetProductById(int id)<\/em>&nbsp;<\/p>\n\n\n\n<p><em>{<\/em>&nbsp;<\/p>\n\n\n\n<p><em>\/\/ Simula\u00e7\u00e3o de acesso ao banco de dados<\/em>&nbsp;<\/p>\n\n\n\n<p><em>return new Product { Id = id, Name = &#8220;Sample Product&#8221;, Price = 99.99m };<\/em>&nbsp;<\/p>\n\n\n\n<p><em>}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>}<\/em>&nbsp;<\/p>\n\n\n\n<p>E, para concluir, em <strong>Presentation<\/strong>, crie um controlador para expor uma API:&nbsp;<\/p>\n\n\n\n<p><em>using Microsoft.AspNetCore.Mvc;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>using Application.Services;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>namespace Presentation.Controllers<\/em>&nbsp;<\/p>\n\n\n\n<p><em>{<\/em>&nbsp;<\/p>\n\n\n\n<p><em>[ApiController]<\/em>&nbsp;<\/p>\n\n\n\n<p><em>[Route(&#8220;api\/[controller]&#8221;)]<\/em>&nbsp;<\/p>\n\n\n\n<p><em>public class ProductsController : ControllerBase<\/em>&nbsp;<\/p>\n\n\n\n<p><em>{<\/em>&nbsp;<\/p>\n\n\n\n<p><em>private readonly IProductService _productService;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>public ProductsController(IProductService productService)<\/em>&nbsp;<\/p>\n\n\n\n<p><em>{<\/em>&nbsp;<\/p>\n\n\n\n<p><em>_productService = productService;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>[HttpGet(&#8220;{id}&#8221;)]<\/em>&nbsp;<\/p>\n\n\n\n<p><em>public IActionResult GetProduct(int id)<\/em>&nbsp;<\/p>\n\n\n\n<p><em>{<\/em>&nbsp;<\/p>\n\n\n\n<p><em>var product = _productService.GetProductById(id);<\/em>&nbsp;<\/p>\n\n\n\n<p><em>return Ok(product);<\/em>&nbsp;<\/p>\n\n\n\n<p><em>}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>}<\/em>&nbsp;<\/p>\n\n\n\n<p><em>}<\/em>&nbsp;<\/p>\n\n\n\n<p>A <strong>configura\u00e7\u00e3o final<\/strong> fica por conta do arquivo Program.cs do projeto Presentation, no qual os servi\u00e7os ser\u00e3o registrados como segue:&nbsp;<\/p>\n\n\n\n<p><em>using Application.Services;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>using Infrastructure.Repositories;<\/em>&nbsp;<\/p>\n\n\n\n<p><em>var builder = WebApplication.CreateBuilder(args);<\/em>&nbsp;<\/p>\n\n\n\n<p><em>\/\/ Registrar servi\u00e7os<\/em>&nbsp;<\/p>\n\n\n\n<p><em>builder.Services.AddScoped&lt;IProductService, ProductRepository&gt;();<\/em>&nbsp;<\/p>\n\n\n\n<p><em>var app = builder.Build();<\/em>&nbsp;<\/p>\n\n\n\n<p><em>app.MapControllers();<\/em>&nbsp;<\/p>\n\n\n\n<p><em>app.Run();<\/em>&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"DESBRAVANDO ARQUITETURAS MODULARES  | Locaweb PHP Community Summit\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/BWULLb58Oew?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>De modo geral, voc\u00ea viu que a Modular Monolith Architecture <strong>\u00e9 uma excelente escolha para projetos que precisam de uma estrutura organizada e escal\u00e1vel<\/strong>, sem a complexidade operacional dos microsservi\u00e7os. Com o exemplo pr\u00e1tico em .NET Core 9 com C#, voc\u00ea pode come\u00e7ar a aplicar essa arquitetura em seus projetos e aproveitar seus benef\u00edcios.&nbsp;<\/p>\n\n\n\n<p>Experimente expandir o exemplo, adicionando mais m\u00f3dulos e funcionalidades, e veja como<strong> essa abordagem pode simplificar o desenvolvimento e a manuten\u00e7\u00e3o do seu software<\/strong>.&nbsp;<\/p>\n\n\n\n<p>E para fazer com que seus projetos de desenvolvimento performem de forma eficiente, nada melhor do que contar com um <strong>servidor VPS<\/strong>. Com ele, voc\u00ea garante, al\u00e9m de performance, estabilidade. &nbsp;<\/p>\n\n\n\n<p>A Locaweb oferece o servi\u00e7o de VPS, com <strong>m\u00e1quinas robustas para aplica\u00e7\u00f5es de alta demanda, disponibilidade com infraestrutura no Brasil e suporte em portugu\u00eas 24\/7<\/strong>. Tudo isso com a grande vantagem da cobran\u00e7a em Real. <a href=\"https:\/\/www.locaweb.com.br\/servidor-vps\/\" target=\"_blank\" rel=\"noreferrer noopener\">Saiba mais no site!<\/a>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Entenda o significado de Modular Monolith Architecture e aprenda a aplic\u00e1-la para garantir um desenvolvimento \u00e1gil com estabilidade e escalabilidade.&nbsp; A arquitetura de software \u00e9 um dos pilares fundamentais para o sucesso de qualquer projeto de desenvolvimento. E entre as diversas abordagens dispon\u00edveis, a Modular Monolith Architecture \u2014 que pode ser compreendida como Arquitetura Monolito [&hellip;]<\/p>\n","protected":false},"author":24,"featured_media":52316,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-52312","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-aberto"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/52312","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/users\/24"}],"replies":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/comments?post=52312"}],"version-history":[{"count":2,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/52312\/revisions"}],"predecessor-version":[{"id":52317,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/52312\/revisions\/52317"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/media\/52316"}],"wp:attachment":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/media?parent=52312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/categories?post=52312"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/tags?post=52312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}