{"id":19844871,"url":"https://github.com/lucasrmagalhaes/aplicandodesignpatterns-csharp","last_synced_at":"2026-03-05T17:06:17.904Z","repository":{"id":55076316,"uuid":"328531151","full_name":"lucasrmagalhaes/aplicandoDesignPatterns-csharp","owner":"lucasrmagalhaes","description":"Aplicando Design Patterns na Prática com C#","archived":false,"fork":false,"pushed_at":"2022-09-27T03:37:02.000Z","size":996,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-11T12:22:26.270Z","etag":null,"topics":["avanade","design-patterns","dio"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lucasrmagalhaes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-01-11T02:49:08.000Z","updated_at":"2024-08-26T01:57:25.000Z","dependencies_parsed_at":"2023-01-18T19:37:39.734Z","dependency_job_id":null,"html_url":"https://github.com/lucasrmagalhaes/aplicandoDesignPatterns-csharp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucasrmagalhaes%2FaplicandoDesignPatterns-csharp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucasrmagalhaes%2FaplicandoDesignPatterns-csharp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucasrmagalhaes%2FaplicandoDesignPatterns-csharp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucasrmagalhaes%2FaplicandoDesignPatterns-csharp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lucasrmagalhaes","download_url":"https://codeload.github.com/lucasrmagalhaes/aplicandoDesignPatterns-csharp/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241223902,"owners_count":19929811,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["avanade","design-patterns","dio"],"created_at":"2024-11-12T13:05:50.678Z","updated_at":"2026-03-05T17:06:17.862Z","avatar_url":"https://github.com/lucasrmagalhaes.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eAplicando Design Patterns na Prática com C#\u003c/h1\u003e\n\n\u003ch5 align=\"left\"\u003eDefinição\u003c/h5\u003e\n\n\u003cp align=\"justify\"\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Design Patterns são soluções reutilizáveis para problemas comumente ocorridos (no contexto do design de software). Estes padrões foram iniciados como melhores práticas que foram aplicadas repetidamente a problemas semelhantes encontrados em diferentes contextos. Eles se tornaram populares depois que foram apresentados, de forma estruturada, no livro \"Design Patterns - Elements of Reusable Object-Oriented Software\" (Gang of Four) em 1994.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  O \"Gang of Four\" representa apenas uma de muitas coleções.\n\u003c/p\u003e\n\n\u003chr /\u003e\n\n\u003ch5 align=\"left\"\u003eGang Of Four\u003c/h5\u003e\n\n\u003cp align=\"left\"\u003e\n  \u003cimg src=\"https://github.com/lucasrmagalhaes/aplicandoDesignPatternsNaPraticaComDotNet-DIO/blob/main/img/GoF.jpg\" alt=\"Gang Of Four\"\u003e\n\u003c/p\u003e\n\n\u003chr /\u003e\n\n\u003ch5 align=\"left\"\u003ePorque eu devo usar?\u003c/h5\u003e\n\n\u003cul\u003e\n  \u003cli\u003e\u003cstrong\u003eProdutividade:\u003c/strong\u003e Estes padrões são modelos de resolução de problemas que já foram utilizados e testados inúmeras vezes;\u003c/li\u003e\n  \u003cli\u003e\u003cstrong\u003eManutenção:\u003c/strong\u003e Os padrões são baseados em soluções de baixo acoplamento e padronização de soluções;\u003c/li\u003e\n  \u003cli\u003e\u003cstrong\u003eTemos Universais:\u003c/strong\u003e Os projetos são amplamente conhecidos desta forma as discussões técnicas são facilitadas, é mais simples falar o nome de um \"design pattern\" do que toda vez ter que explicar o seu comportamente.\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003chr /\u003e\n\n\u003ch5 align=\"left\"\u003eATENÇÃO!!!\u003c/h5\u003e\n\n\u003cp align=\"left\"\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Antes de começar a apicar padrões de projetos precisamos entender algumas coisas...\n\u003c/p\u003e\n\n\u003ch5 align=\"left\"\u003eDesuso\u003c/h5\u003e\n\n\u003cp align=\"left\"\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Alguns padrões surgiram para solucionar limitações de linguagens de programação com menos recursos no que diz respeito à abstração, nestes casos os padrões era como \"gambiarras\" que proporcionavam à linguagem a possibilidade de fazer implementações que não eram possíveis nativamente.\u003cbr /\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Linguagens mais recentes trazem alguns destes recursos nativamente, em alguns outros casos os padrões foram substituídos por padrões mais recentes.\u003cbr /\u003e\n  \n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;O padrão Strategy, por exemplo, pode ser substituído pelo o uso de uma função anônima.\n\u003c/p\u003e\n\n\u003ch5 align=\"left\"\u003eSoluções \"Prontas\"\u003c/h5\u003e\n\n\u003cp align=\"left\"\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Os padrões não são soluções prontas, códigos que podemos pegar prontos e \"jogar\" dentro do projeto, em alguns casos é necessário ajustar o padrão ao contexto em que o projeto necessita, e isso costuma demandar um conhecimento mais profundo por parte da equipe de desenvolvimento.\n\u003c/p\u003e\n\n\u003ch5 align=\"left\"\u003eA \"bala de prata\"\u003c/h5\u003e\n\n\u003cp align=\"left\"\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;É comum ver desenvolvedores que ao conhecer um novo padrão/técnica, tentam encaixar ele em todos os cenários, inclusive em situações onde uma abordagem mais simples seria suficiente para resolver o problema.\u003cbr /\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Um martelo é ótimo para colocar um prego na parede, mas não funciona tão bem se você tiver um parafuso.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  Lembre-se: Não é uma competição para ver quem usa mais padrões.\n\u003c/p\u003e\n\n\u003chr /\u003e\n\n\u003ch5 align=\"left\"\u003eS.O.L.I.D.\u003c/h5\u003e\n\n\u003cp align=\"left\"\u003e\n  \u003cimg src=\"https://github.com/lucasrmagalhaes/aplicandoDesignPatternsNaPraticaComDotNet-DIO/blob/main/img/OsPrincipiosDoS.O.L.I.D.jpg\" alt=\"Os Princípios do S.O.L.I.D.\"\u003e\n\u003c/p\u003e\n\n\u003ch5 align=\"left\"\u003eProblemas comuns em aplicações que NÃO usam o S.O.L.I.D.\u003c/h5\u003e\n\n\u003cul\u003e\n  \u003cli\u003eDuplicidade de Código;\u003c/li\u003e\n  \u003cli\u003eCódigo sem estrutura coesa;\u003c/li\u003e\n  \u003cli\u003eDificuldade de manter/evoluir;\u003c/li\u003e\n  \u003cli\u003ePequenos ajustes podem quebrar o código, inclusive em outras partes do sistema;\u003c/li\u003e\n  \u003cli\u003eDificuldade para executar e criar testes unitários; e\u003c/li\u003e\n  \u003cli\u003eDificuldade de reaproveitar código para outras aplicações.\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ch5 align=\"left\"\u003ePrincipais benefícios\u003c/h5\u003e\n\n\u003cul\u003e\n  \u003cli\u003eFácil manutenção;\u003c/li\u003e\n  \u003cli\u003eFácil entendimento;\u003c/li\u003e\n  \u003cli\u003eOrganização;\u003c/li\u003e\n  \u003cli\u003eAberta a receber novas funcionalidades sem danos colaterais;\u003c/li\u003e\n  \u003cli\u003eReaproveitamento de código; e\u003c/li\u003e\n  \u003cli\u003eFácil adaptação a mudanças no escopo do projeto.\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003chr /\u003e\n\n\u003ch5 align=\"left\"\u003eExemplos Práticos (WebAPI REST .NET Core)\u003c/h5\u003e\n\n\u003cp align=\"left\"\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"https://github.com/fructuoso/DesignPatternSamples\"\u003eDesignPatternSamples\u003c/a\u003e\n\u003c/p\u003e\n\n\u003chr /\u003e\n\n\u003ch5 align=\"left\"\u003eEstudos Complementares\u003c/h5\u003e\n\n\u003cp align=\"left\"\u003e\n  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003ca href=\"https://docs.microsoft.com/en-us/azure/architecture/patterns/\"\u003eCloud Design Patterns:\u003c/a\u003e Apresenta os principais desafios do desenvolvimento na nuvem e padrões difundidos no mercado para supera-los.\n\u003c/p\u003e\n\n\u003chr /\u003e\n\n\u003ch5 align=\"left\"\u003eReferências:\u003c/h5\u003e\n\n\u003cul\u003e\n  \u003cli\u003e\u003ca href=\"https://www.oodesign.com/\"\u003eOODesign\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"https://www.dofactory.com/net/design-patterns/\"\u003edofactory\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"https://refactoring.guru/design-patterns\"\u003eRefactoring Guru\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003chr /\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cstrong\u003eCertifique seu conhecimento:\u003c/strong\u003e\u003c/summary\u003e\n  \u003cbr /\u003e\n  \u003cstrong\u003eQual a vantagem de se utilizar Design patterns ?\u003c/strong\u003e\u003cbr /\u003e\n  Criar soluções padrões universais de fácil entendimento para todo o time.\n  \u003cbr /\u003e\u003cbr /\u003e\n  \u003cstrong\u003eO que são design patterns?\u003c/strong\u003e\u003cbr /\u003e\n  São soluções típicas para problemas comuns em projeto de software.\n  \u003cbr /\u003e\u003cbr /\u003e\n  \u003cstrong\u003eStrategy pattern é um design pattern do tipo:\u003c/strong\u003e\u003cbr /\u003e\n  Comportamental.\n  \u003cbr /\u003e\u003cbr /\u003e\n  \u003cstrong\u003eO que significa o principio S do S.O.L.I.D. ?\u003c/strong\u003e\u003cbr /\u003e\n  Single responsability (Principio da Responsabilidade Única).\n  \u003cbr /\u003e\u003cbr /\u003e\n  \u003cstrong\u003eQual dos itens abaixo NÁO é um design pattern?\u003c/strong\u003e\u003cbr /\u003e\n  Reserve.\n  \u003cbr /\u003e\u003cbr /\u003e\n  \u003cstrong\u003eO que são os princípios do S.O.L.I.D.?\u003c/strong\u003e\u003cbr /\u003e\n  SOLID é um conjunto de princípios e boas práticas para melhorar o design de software e arquitetura.\n  \u003cbr /\u003e\u003cbr /\u003e\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucasrmagalhaes%2Faplicandodesignpatterns-csharp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flucasrmagalhaes%2Faplicandodesignpatterns-csharp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucasrmagalhaes%2Faplicandodesignpatterns-csharp/lists"}