{"id":9989,"date":"2023-12-04T20:51:35","date_gmt":"2023-12-04T23:51:35","guid":{"rendered":"https:\/\/elemarjr.com\/clube-de-estudos\/?post_type=artigos&#038;p=9989"},"modified":"2023-12-26T09:56:10","modified_gmt":"2023-12-26T12:56:10","slug":"como-padroes-me-ajudam-a-escrever-codigo-novo-mais-rapido","status":"publish","type":"artigos","link":"https:\/\/elemarjr.com\/clube-de-estudos\/artigos\/como-padroes-me-ajudam-a-escrever-codigo-novo-mais-rapido\/","title":{"rendered":"Como Padr\u00f5es me Ajudam a Escrever C\u00f3digo Novo, Mais R\u00e1pido"},"content":{"rendered":"\n<p>Os padr\u00f5es de projeto s\u00e3o verdadeiros aliados no desenvolvimento de software. N\u00e3o \u00e9 apenas sobre velocidade, mas tamb\u00e9m sobre a garantia de qualidade e adaptabilidade. Vamos entender como a familiaridade com os <em>design patterns<\/em> acelera a codifica\u00e7\u00e3o e como essa pr\u00e1tica pode ser aprimorada com exemplos pr\u00e1ticos e reflex\u00f5es sobre suas limita\u00e7\u00f5es.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O Processo de Codifica\u00e7\u00e3o e o Papel dos Padr\u00f5es de Projeto<\/h2>\n\n\n\n<p>Ao iniciar um projeto, meu principal foco \u00e9 extrair as ideias da mente e dar-lhes forma no c\u00f3digo. Inicialmente, a organiza\u00e7\u00e3o n\u00e3o \u00e9 a prioridade, mas sim validar o conceito. Uma vez que tenho uma estrutura b\u00e1sica, \u00e9 hora de otimiz\u00e1-la, e \u00e9 aqui que entram os padr\u00f5es de projeto. Vou lhe mostrar um exemplo simples com o padr\u00e3o <em>Singleton<\/em> em C#.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" style=\"font-size:.875rem;line-height:1.25rem\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" data-code=\"public class DatabaseConnection\n{\n    private static DatabaseConnection _instance;\n    private static readonly object _lock = new object();\n\n    private DatabaseConnection() { }\n\n    public static DatabaseConnection Instance\n    {\n        get\n        {\n            lock (_lock)\n            {\n                if (_instance == null)\n                {\n                    _instance = new DatabaseConnection();\n                }\n                return _instance;\n            }\n        }\n    }\n}\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\"><code><span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">DatabaseConnection<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">static<\/span><span style=\"color: #D8DEE9FF\"> DatabaseConnection _instance<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">static<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">readonly<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">object<\/span><span style=\"color: #D8DEE9FF\"> _lock <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">object<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">DatabaseConnection<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">static<\/span><span style=\"color: #D8DEE9FF\"> DatabaseConnection Instance<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">get<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">lock<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">_lock<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">_instance<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">null<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                    <\/span><span style=\"color: #D8DEE9\">_instance<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> DatabaseConnection<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">_instance<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Neste exemplo, garantimos que apenas uma inst\u00e2ncia da classe <code>DatabaseConnection<\/code> \u00e9 criada, controlando o acesso a ela. O uso do <em>Singleton<\/em> facilita o gerenciamento de recursos, como conex\u00f5es de banco de dados.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A For\u00e7a dos Padr\u00f5es de Projeto<\/h2>\n\n\n\n<p>Pensar em termos de padr\u00f5es de projeto oferece clareza mental e um vocabul\u00e1rio comum entre os desenvolvedores. Quando reconhe\u00e7o um problema familiar, eu imediatamente identifico qual padr\u00e3o se aplica. Isso me permite refatorar meu c\u00f3digo mais rapidamente e com confian\u00e7a, sabendo que estou seguindo uma solu\u00e7\u00e3o comprovada.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Integra\u00e7\u00e3o com Pr\u00e1ticas de Desenvolvimento Modernas<\/h2>\n\n\n\n<p>A metodologia \u00e1gil enfatiza c\u00f3digo mant\u00edvel e extens\u00edvel, perfeito para a aplica\u00e7\u00e3o de padr\u00f5es de projeto. Estes promovem encapsulamento e modularidade, cruciais para um <em>software<\/em> robusto e adapt\u00e1vel.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Limites dos Padr\u00f5es de Projeto<\/h2>\n\n\n\n<p>Embora os <em>design patterns<\/em> ofere\u00e7am muitas vantagens, \u00e9 essencial saber quando n\u00e3o us\u00e1-los. Aplicar um padr\u00e3o sem necessidade real pode levar a um aumento desnecess\u00e1rio na complexidade do c\u00f3digo, dificultando o entendimento e a manuten\u00e7\u00e3o. Devemos sempre questionar: esse padr\u00e3o resolve um problema atual? Ele adiciona claridade ou apenas complica\u00e7\u00e3o?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>Design patterns promovem efici\u00eancia e qualidade, mas devem ser utilizados com discernimento. A pr\u00e1tica de padr\u00f5es de projeto \u00e9 inequivocamente valiosa, oferecendo um caminho para um desenvolvimento mais r\u00e1pido e eficiente, enquanto evita excessos nas solu\u00e7\u00f5es implementadas. A abordagem balanceada, unindo exemplos pr\u00e1ticos e teoria, \u00e9 a chave para um <em>software<\/em> arquiteturalmente s\u00f3lido e sustent\u00e1vel. Esse balanceamento entre teoria e pr\u00e1tica \u00e9 continuamente explorado nos meus grupos de estudos e mentorias.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">TL;DR<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Os padr\u00f5es de projeto aceleram a transi\u00e7\u00e3o do pensamento para a implementa\u00e7\u00e3o efetiva de c\u00f3digo.<\/li>\n\n\n\n<li>Oferecem uma linguagem comum para problemas e solu\u00e7\u00f5es, facilitando o processo de refatora\u00e7\u00e3o.<\/li>\n\n\n\n<li>Os padr\u00f5es devem ser aplicados com cuidado, evitando complexidade desnecess\u00e1ria, sempre visando o equil\u00edbrio entre a solu\u00e7\u00e3o e sua aplicabilidade pr\u00e1tica.<\/li>\n<\/ol>\n","protected":false},"featured_media":9974,"parent":0,"template":"","cursos":[7],"class_list":["post-9989","artigos","type-artigos","status-publish","has-post-thumbnail","hentry","cursos-gof"],"acf":[],"_links":{"self":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos\/9989","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos"}],"about":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/types\/artigos"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media\/9974"}],"wp:attachment":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media?parent=9989"}],"wp:term":[{"taxonomy":"cursos","embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/cursos?post=9989"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}