<?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: benevanio santos</title>
    <description>The latest articles on DEV Community by benevanio santos (@benevanio_santos).</description>
    <link>https://dev.to/benevanio_santos</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2994859%2F6d0f7bf9-b0cb-4bf4-93e3-313bfe6c713c.jpg</url>
      <title>DEV Community: benevanio santos</title>
      <link>https://dev.to/benevanio_santos</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/benevanio_santos"/>
    <language>en</language>
    <item>
      <title>Arquitetura de Software pós-graduação: quando “aprender o framework” não é suficiente</title>
      <dc:creator>benevanio santos</dc:creator>
      <pubDate>Mon, 24 Aug 2026 22:11:37 +0000</pubDate>
      <link>https://dev.to/benevanio_santos/arquitetura-de-software-pos-graduacao-quando-aprender-o-framework-nao-e-suficiente-41dl</link>
      <guid>https://dev.to/benevanio_santos/arquitetura-de-software-pos-graduacao-quando-aprender-o-framework-nao-e-suficiente-41dl</guid>
      <description>&lt;p&gt;Recentemente concluí a disciplina &lt;strong&gt;Arquitetura de Software com Framework Java (2025)&lt;/strong&gt;, da minha pós-graduação em &lt;strong&gt;Arquitetura de Software Distribuído na PUC Minas&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A disciplina aborda temas relevantes: Java, Spring Boot, Spring Data, JPA, HTTP e alguns Design Patterns, como Singleton, Factory, Facade e Decorator.&lt;/p&gt;

&lt;p&gt;As explicações são claras e a didática é boa.&lt;/p&gt;

&lt;p&gt;Mas, sendo bastante sincero, terminei a disciplina com a sensação de que o conteúdo ficou &lt;strong&gt;aquém do que eu esperava de uma especialização em arquitetura de software&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  O problema não é o conteúdo. É a profundidade.
&lt;/h2&gt;

&lt;p&gt;Não considero os assuntos escolhidos inadequados. Pelo contrário.&lt;/p&gt;

&lt;p&gt;O problema está na forma como eles são explorados.&lt;/p&gt;

&lt;p&gt;Em diversos momentos, a abordagem fica muito próxima de uma introdução:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;O que é o padrão?&lt;/p&gt;

&lt;p&gt;Para que serve?&lt;/p&gt;

&lt;p&gt;Como implementar?&lt;/p&gt;

&lt;p&gt;Próximo assunto.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Isso funciona muito bem para quem está tendo o primeiro contato com determinado conceito.&lt;/p&gt;

&lt;p&gt;Porém, quando estamos falando de arquitetura de software, especialmente em sistemas distribuídos, acredito que a discussão deveria avançar para outro nível.&lt;/p&gt;

&lt;p&gt;Não apenas:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Como utilizar o Factory?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mas também:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Qual problema arquitetural estou tentando resolver com o Factory? Quais são as alternativas? Quais são os trade-offs? O uso desse padrão realmente melhora o design ou estou apenas adicionando complexidade?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Essa diferença é importante.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design Patterns não deveriam ser apenas implementações
&lt;/h2&gt;

&lt;p&gt;Durante a disciplina são apresentados padrões como Singleton, Factory, Facade e Decorator.&lt;/p&gt;

&lt;p&gt;Conhecer esses padrões é importante.&lt;/p&gt;

&lt;p&gt;Mas acredito que uma disciplina de arquitetura deveria explorar também questões como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quando utilizar determinado padrão?&lt;/li&gt;
&lt;li&gt;Quando não utilizar?&lt;/li&gt;
&lt;li&gt;Qual problema ele resolve?&lt;/li&gt;
&lt;li&gt;Qual complexidade ele adiciona?&lt;/li&gt;
&lt;li&gt;Como ele afeta acoplamento e coesão?&lt;/li&gt;
&lt;li&gt;Como impacta testabilidade?&lt;/li&gt;
&lt;li&gt;Quais são os custos de manutenção?&lt;/li&gt;
&lt;li&gt;Como esse padrão se comporta em sistemas distribuídos?&lt;/li&gt;
&lt;li&gt;Existem alternativas melhores utilizando recursos modernos da linguagem ou do framework?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Um Singleton, por exemplo, não deveria ser discutido apenas como:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“garantir que uma classe tenha apenas uma instância”.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Seria interessante discutir também &lt;strong&gt;estado global, concorrência, testabilidade, ciclo de vida, injeção de dependência e por que frameworks modernos frequentemente oferecem mecanismos melhores para resolver esse tipo de necessidade&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;É justamente nesse tipo de discussão que, na minha opinião, arquitetura começa a deixar de ser apenas implementação e passa a ser &lt;strong&gt;tomada de decisão&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spring Boot também poderia ser explorado de outra perspectiva
&lt;/h2&gt;

&lt;p&gt;O mesmo acontece com Spring Boot.&lt;/p&gt;

&lt;p&gt;Aprender &lt;code&gt;@RestController&lt;/code&gt;, &lt;code&gt;@Service&lt;/code&gt;, &lt;code&gt;JpaRepository&lt;/code&gt;, &lt;code&gt;@Column&lt;/code&gt;, &lt;code&gt;findById()&lt;/code&gt; e outras abstrações é necessário.&lt;/p&gt;

&lt;p&gt;Mas isso responde principalmente à pergunta:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Como faço?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Em arquitetura, eu esperaria também perguntas como:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Por que fazer dessa maneira?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Qual será o impacto dessa decisão quando o sistema crescer?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Como essa aplicação vai se comportar sob carga?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Onde entra cache?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Como tratar falhas?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Como observar o sistema?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Como lidar com concorrência?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Como separar responsabilidades?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Quando uma aplicação Spring Boot deveria deixar de ser um monólito?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Quando não deveria ser quebrada em microsserviços?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Como lidar com transações distribuídas?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Como projetar comunicação síncrona e assíncrona?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Essas são discussões que considero muito mais próximas do objetivo de uma disciplina de arquitetura.&lt;/p&gt;

&lt;h2&gt;
  
  
  A carga horária também pesa
&lt;/h2&gt;

&lt;p&gt;Outro ponto que me chamou bastante atenção foi a quantidade de conteúdo em relação à carga horária.&lt;/p&gt;

&lt;p&gt;Alguns assuntos são apresentados em aulas extremamente curtas.&lt;/p&gt;

&lt;p&gt;Uma aula de poucos minutos pode ser suficiente para apresentar um conceito, mas dificilmente é suficiente para &lt;strong&gt;explorar profundamente suas aplicações, limitações e trade-offs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Na minha percepção, o conteúdo relacionado ao ecossistema Java poderia facilmente ocupar uma carga horária significativamente maior.&lt;/p&gt;

&lt;p&gt;Algo na faixa de &lt;strong&gt;48 a 80 horas&lt;/strong&gt;, por exemplo, permitiria trabalhar os conceitos com muito mais profundidade, principalmente através de exercícios, estudos de caso e projetos práticos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Talvez minha expectativa também esteja relacionada à experiência profissional
&lt;/h2&gt;

&lt;p&gt;Existe outro fator importante nessa avaliação.&lt;/p&gt;

&lt;p&gt;Eu já tive contato profissional com Java, inclusive trabalhando com &lt;strong&gt;Java 6&lt;/strong&gt; em um projeto na Natura durante minha passagem pela SysMap.&lt;/p&gt;

&lt;p&gt;Por isso, alguns conceitos apresentados não eram completamente novos para mim.&lt;/p&gt;

&lt;p&gt;Isso naturalmente aumenta minha expectativa em relação ao conteúdo.&lt;/p&gt;

&lt;p&gt;Para alguém que está começando no ecossistema Java, a disciplina provavelmente funciona muito bem como uma introdução organizada.&lt;/p&gt;

&lt;p&gt;Para alguém que já trabalha com desenvolvimento de software, entretanto, eu esperava que a disciplina avançasse mais rapidamente para os problemas arquiteturais.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que eu gostaria de ter visto?
&lt;/h2&gt;

&lt;p&gt;Principalmente mais situações reais.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;/p&gt;

&lt;h3&gt;
  
  
  Arquitetura
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Monólito vs. microsserviços&lt;/li&gt;
&lt;li&gt;Modularização&lt;/li&gt;
&lt;li&gt;Clean Architecture&lt;/li&gt;
&lt;li&gt;Hexagonal Architecture&lt;/li&gt;
&lt;li&gt;DDD&lt;/li&gt;
&lt;li&gt;Bounded Contexts&lt;/li&gt;
&lt;li&gt;Event-Driven Architecture&lt;/li&gt;
&lt;li&gt;Comunicação síncrona vs. assíncrona&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Consistência&lt;/li&gt;
&lt;li&gt;Idempotência&lt;/li&gt;
&lt;li&gt;Retry&lt;/li&gt;
&lt;li&gt;Circuit Breaker&lt;/li&gt;
&lt;li&gt;Timeout&lt;/li&gt;
&lt;li&gt;Bulkhead&lt;/li&gt;
&lt;li&gt;Rate Limiting&lt;/li&gt;
&lt;li&gt;Mensageria&lt;/li&gt;
&lt;li&gt;Eventual Consistency&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Persistência
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Estratégias de cache&lt;/li&gt;
&lt;li&gt;N+1 queries&lt;/li&gt;
&lt;li&gt;Índices&lt;/li&gt;
&lt;li&gt;Transações&lt;/li&gt;
&lt;li&gt;Concorrência&lt;/li&gt;
&lt;li&gt;Connection Pool&lt;/li&gt;
&lt;li&gt;Performance do ORM&lt;/li&gt;
&lt;li&gt;Quando utilizar ou evitar abstrações do JPA&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Observabilidade
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Logs estruturados&lt;/li&gt;
&lt;li&gt;Métricas&lt;/li&gt;
&lt;li&gt;Tracing distribuído&lt;/li&gt;
&lt;li&gt;Correlation ID&lt;/li&gt;
&lt;li&gt;Monitoramento&lt;/li&gt;
&lt;li&gt;Diagnóstico de falhas&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Segurança
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;OAuth2&lt;/li&gt;
&lt;li&gt;JWT&lt;/li&gt;
&lt;li&gt;Controle de acesso&lt;/li&gt;
&lt;li&gt;Gestão de secrets&lt;/li&gt;
&lt;li&gt;Segurança entre serviços&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E, principalmente, &lt;strong&gt;estudos de caso onde uma decisão arquitetural tivesse consequências reais&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Você possui um sistema que suporta 100 usuários. Agora precisa suportar 100 mil. O que muda?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Esse tipo de problema gera uma discussão arquitetural muito mais interessante do que simplesmente apresentar uma anotação do Spring.&lt;/p&gt;

&lt;h2&gt;
  
  
  A crítica é construtiva
&lt;/h2&gt;

&lt;p&gt;Não considero a disciplina ruim.&lt;/p&gt;

&lt;p&gt;As explicações são boas, os conceitos apresentados são relevantes e existe valor em organizar esse conhecimento.&lt;/p&gt;

&lt;p&gt;Minha crítica é justamente porque acredito que &lt;strong&gt;o potencial da disciplina é muito maior&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Em uma graduação, eu consideraria perfeitamente aceitável uma abordagem mais introdutória.&lt;/p&gt;

&lt;p&gt;Em uma pós-graduação focada em &lt;strong&gt;Arquitetura de Software Distribuído&lt;/strong&gt;, porém, eu esperava uma discussão mais profunda sobre decisões, consequências e trade-offs.&lt;/p&gt;

&lt;p&gt;A diferença entre aprender uma tecnologia e aprender arquitetura, para mim, está justamente aí.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aprender uma tecnologia é saber utilizá-la.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aprender arquitetura é saber quando utilizá-la, quando não utilizá-la e entender as consequências dessa escolha.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Essa é a principal reflexão que levo dessa disciplina.&lt;/p&gt;

&lt;p&gt;E talvez seja também uma das discussões mais importantes para quem trabalha com engenharia de software atualmente.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>education</category>
      <category>java</category>
      <category>softwareengineering</category>
    </item>
  </channel>
</rss>
