{"id":60,"date":"2023-05-18T11:45:00","date_gmt":"2023-05-18T14:45:00","guid":{"rendered":"https:\/\/dumba.dev.br\/?p=60"},"modified":"2026-01-13T11:49:02","modified_gmt":"2026-01-13T14:49:02","slug":"srp-principio-da-responsabilidade-unica-voce-sempre-entendeu-errado","status":"publish","type":"post","link":"https:\/\/dumba.dev.br\/index.php\/2023\/05\/18\/srp-principio-da-responsabilidade-unica-voce-sempre-entendeu-errado\/","title":{"rendered":"SRP &#8211; Princ\u00edpio da Responsabilidade \u00danica, voc\u00ea sempre entendeu errado"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">O famoso princ\u00edpio da responsabilidade \u00fanica (Single Responsibility Principle), \u201co S do SOLID\u201d. O mais difundido e o mais mal interpretado de todos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Primeiramente, vamos ao que \u00e9&nbsp;<strong>SOLID<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Segundo nosso \u201cquerido&#8221;&nbsp;<strong>Tio Bob<\/strong>:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u201cOs princ\u00edpios SOLID nos dizem como organizar as fun\u00e7\u00f5es e estruturas de dados em classes e como essas classes devem ser interconectadas\u2026\u201d.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Entenda como a estrutura por traz do seu software ou em que pastas eles devem ficar. Calma, to brincando, mas nem tanto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ainda segundo o Tio, tudo isso para que tenhamos softwares que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Sejam tolerantes a falhas;<\/strong><\/li>\n\n\n\n<li><strong>Sejam f\u00e1ceis de entender;<\/strong><\/li>\n\n\n\n<li><strong>Sejam a base de componentes que possam ser usados em muitos sistemas de software.<\/strong><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Simplificando, para que voc\u00ea consiga deixar seu coleguinha feliz quando ele for da manuten\u00e7\u00e3o no mostro que criou e que seu c\u00f3digo possa ser reutilizado como modulo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos falar sobre o primeiro acr\u00f4nimo o S&nbsp;<strong>Single Responsibility Principle (SRP)<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Afinal o que \u00e9 SRP?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Segundo a historia, SRP \u00e9:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u201cUm modulo deve ter uma, e apenas uma, raz\u00e3o para mudar\u201d.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea leu bem,&nbsp;<strong>modulo<\/strong>. Falo sobre isso um pouco mais abaixo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mas ent\u00e3o quando eu coloco classes e fun\u00e7\u00f5es que fazem somente uma coisa ela sem enquadra nisso? Ent\u00e3o \u00e9 SRP? Sim e N\u00e3o.<br>Sim, para o conceito de que classes e fun\u00e7\u00f5es devem fazer apenas uma coisa. Facilita muito o c\u00f3digo, mas isso somente n\u00e3o \u00e9 o que diz esse princ\u00edpio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Segundo o Tio:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u201cUm m\u00f3dulo deve ser respons\u00e1vel por um, e apenas um, usu\u00e1rio ou stakeholder\u201d<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Entenda usu\u00e1rio e stakeholder como Atores ou respons\u00e1veis por aquele modulo. Entenda modulo como o conjunto de classes e fun\u00e7\u00f5es que atendem a demanda dos Atores. Agora n\u00e3o sei se piorei ou melhorei o neg\u00f3cio. \ud83d\ude42<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mas juntando as duas coisas, quem deve ser respons\u00e1vel pela mudan\u00e7a \u00e9 o Ator (Deparmento, Usuario, Stakeholder) que representa aquele modulo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Um exemplo.&nbsp;<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos imaginar o tradicional sistemas de Estoque.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Imagine o sistema feito pelo seu sobrinho que aprendeu programa\u00e7\u00e3o a 5 meses atras e ganha 5k por m\u00eas. So pra dar uma descontra\u00edda.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"703\" height=\"490\" src=\"http:\/\/dumba.dev.br\/wp-content\/uploads\/2026\/01\/SRP-1.jpg\" alt=\"\" class=\"wp-image-63\" srcset=\"https:\/\/dumba.dev.br\/wp-content\/uploads\/2026\/01\/SRP-1.jpg 703w, https:\/\/dumba.dev.br\/wp-content\/uploads\/2026\/01\/SRP-1-300x209.jpg 300w\" sizes=\"auto, (max-width: 703px) 100vw, 703px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Veja que nesse exemplo, temos dois atores de contextos ou cen\u00e1rios ou departamentos diferentes &#8220;brigando&#8221; pelo&nbsp;<strong>Cadastrar Produtos<\/strong>. Qualquer altera\u00e7\u00e3o no Cadastro de Produtos solicitada pela estoquista pode gerar problemas para o compras e vice e versa. \u00c9 nesse sentido que se entra o SRP e a separa\u00e7\u00e3o dos m\u00f3dulos.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Veja o caso de uso abaixo:&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"620\" src=\"http:\/\/dumba.dev.br\/wp-content\/uploads\/2026\/01\/SRP-2.jpg\" alt=\"\" class=\"wp-image-62\" srcset=\"https:\/\/dumba.dev.br\/wp-content\/uploads\/2026\/01\/SRP-2.jpg 576w, https:\/\/dumba.dev.br\/wp-content\/uploads\/2026\/01\/SRP-2-279x300.jpg 279w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Nesse contexto teremos dois m\u00f3dulos. O Estoque e o Compras e para cada modulo ter\u00edamos o &#8220;Cadastrar Produtos&#8221; com dados, valida\u00e7\u00f5es, tabelas e at\u00e9 banco de dados diferentes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mas Dumb\u00e1, voc\u00ea quer que eu duplique a classe de produtos ou pior a tabela? N\u00e3o seria redundante?&nbsp;Outra vez sim e n\u00e3o. Essa separa\u00e7\u00e3o de contexto \u00e9 muito descrita no&nbsp;<strong>DDD para contextos delimitados<\/strong>&nbsp;e serve de base para&nbsp;<strong>Microsservi\u00e7os<\/strong>.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sim, seria muito interessante duplicar, pois o Produto que o estoquista precisa \u00e9 \u201cdiferente\u201d, veja bem as aspas, pois o diferente \u00e9 em contexto de software e n\u00e3o fisicamente, do que o compras precisa, mas se n\u00e3o estiver preparado para tal complexidade, estenda a classe&nbsp;<strong>Produto<\/strong>&nbsp;ou utilize de um padr\u00e3o chamado&nbsp;<strong>Facede<\/strong>. Assim voc\u00ea ter\u00e1 basicamente a mesma estrutura de produtos gen\u00e9rica e as especialidades de cada Ator separadas.&nbsp;&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"567\" height=\"621\" src=\"http:\/\/dumba.dev.br\/wp-content\/uploads\/2026\/01\/SRP-3.jpg\" alt=\"\" class=\"wp-image-61\" srcset=\"https:\/\/dumba.dev.br\/wp-content\/uploads\/2026\/01\/SRP-3.jpg 567w, https:\/\/dumba.dev.br\/wp-content\/uploads\/2026\/01\/SRP-3-274x300.jpg 274w\" sizes=\"auto, (max-width: 567px) 100vw, 567px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Assim, qualquer mudan\u00e7a feita para um Ator n\u00e3o afeta o outro Ator, garantindo assim o que o SOLID prega, que.&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Sejam tolerantes a falhas;<\/strong><\/li>\n\n\n\n<li><strong>Sejam f\u00e1ceis de entender;<\/strong><\/li>\n\n\n\n<li><strong>Sejam a base de componentes que possam ser usados em muitos sistemas de software.<\/strong><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Tentei explicar de uma forma mais simples o que Tio Bob quis dizer com isso. N\u00e3o se baseie somente nesse artigo, pois \u00e9 um resumo do resumo. Leia o livro Arquitetura Limpa e complemente seu conhecimento. Tem muita gente ensinando esse principio errado, mas o errado tamb\u00e9m esta certo, s\u00f3 que em outro principio. (Me compliquei todo aqui!)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Obrigado pela leitura e d\u00favidas ja sabe! Concordou com nada, pode mandar ai tamb\u00e9m.&nbsp;<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Software de Qualidade \u00e9 aquele que tem o cliente satisfeito.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Bibliografia<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Arquitetura Limpa, Robert C Matin, 2019.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Facede:&nbsp;<a href=\"https:\/\/pt.wikipedia.org\/wiki\/Fa%C3%A7ade\">https:\/\/pt.wikipedia.org\/wiki\/Fa\u00e7ade<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DDD:&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Domain-driven_design\">https:\/\/en.wikipedia.org\/wiki\/Domain-driven_design<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Microsservicos:&nbsp;<a href=\"https:\/\/microservices.io\/\">https:\/\/microservices.io\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>O famoso princ\u00edpio da responsabilidade \u00fanica (Single Responsibility Principle), \u201co S do SOLID\u201d. O mais difundido e o mais mal interpretado de todos. Primeiramente, vamos ao que \u00e9&nbsp;SOLID. Segundo nosso \u201cquerido&#8221;&nbsp;Tio Bob: \u201cOs princ\u00edpios SOLID nos dizem como organizar as fun\u00e7\u00f5es e estruturas de dados em classes e como essas classes devem ser interconectadas\u2026\u201d. Entenda [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":50,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[15],"class_list":["post-60","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arquitetura","tag-destaque"],"_links":{"self":[{"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/posts\/60","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/comments?post=60"}],"version-history":[{"count":1,"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/posts\/60\/revisions"}],"predecessor-version":[{"id":64,"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/posts\/60\/revisions\/64"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/media\/50"}],"wp:attachment":[{"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/media?parent=60"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/categories?post=60"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/tags?post=60"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}