{"id":19839589,"url":"https://github.com/pedrior/projeto-mps","last_synced_at":"2025-05-01T19:30:22.325Z","repository":{"id":152739320,"uuid":"624866357","full_name":"pedrior/projeto-mps","owner":"pedrior","description":"Este repositório contém os projetos/atividades realizados na disciplina Métodos de Projeto de Software ","archived":true,"fork":false,"pushed_at":"2023-06-06T16:45:58.000Z","size":75,"stargazers_count":1,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-16T00:28:25.325Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C#","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/pedrior.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-07T13:02:04.000Z","updated_at":"2023-11-09T23:18:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"4160c4ba-42e5-4120-9c8e-1ee3ced48ed1","html_url":"https://github.com/pedrior/projeto-mps","commit_stats":null,"previous_names":["pedrior/projeto-mps"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedrior%2Fprojeto-mps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedrior%2Fprojeto-mps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedrior%2Fprojeto-mps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedrior%2Fprojeto-mps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pedrior","download_url":"https://codeload.github.com/pedrior/projeto-mps/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251932519,"owners_count":21667157,"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":[],"created_at":"2024-11-12T12:23:19.198Z","updated_at":"2025-05-01T19:30:22.313Z","avatar_url":"https://github.com/pedrior.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# EventHub\nEste repositório contém os projetos/atividades realizados na disciplina Métodos de Projeto de Software \n\n## Padrões de projetos implementados\n- [x] Facade\n  - Classes participantes: `EventFacade`, `UserFacade`\n  - Objetivo: Fornecer uma interface unificada para um conjunto de interfaces em um subsistema. Facade define uma interface de nível mais alto que torna os subsistemas Evento e Usuário mais fácil de usar.\n- [x] Singleton\n  - Classes participantes: `EventFacade`, `UserFacade`\n  - Objetivo: Garantir que uma classe tenha apenas uma instância e fornecer um ponto global de acesso a ela. Aqui, a classe `EventFacade` e `UserFacade` são implementadas como singletons.\n- [x] Factory Method\n  - Classes participantes: `IDbFactory`, `DbFactory`\n  - Objetivo: Definir uma interface para criar um objeto, mas deixar as subclasses decidirem qual classe instanciar. O Factory Method permite adiar a instanciação para subclasses. Aqui, a classe `DbFactory` é implementada como um Factory Method.\n- [x] Simple Factory\n  - Classes participantes: `UserStatisticsReportFactory`, `INotificationDispatcherFactory` `NotificationDispatcherFactory`\n  - Objetivo: Fornecer uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas.\n- [x] Strategy\n  - Classes participantes: `IAuthentication`, `BasicAuthentication`, `GoogleAuthentication`, `FacebookAuthentication`, `TwitterAuthentication`, `INotificationDispatcher`, `EmailNotificationDispatcher`, `SmsNotificationDispatcher`, `PushNotificationDispatcher`\n  - Objetivo: Definir uma família de algoritmos, encapsular cada um deles e torná-los intercambiáveis. Strategy permite que o algoritmo varie independentemente dos clientes que o utilizam.\n- [x] Adapter\n  - Classes participantes: `IAuthentication`, `GoogleAuthenticationAdapter`, `FacebookAuthenticationAdapter`, `TwitterAuthenticationAdapter`, `IGoogleAuthenticationProvider`, `GoogleAuthenticationProvider`, `IFacebookAuthenticationProvider`, `FacebookAuthenticationProvider`, `ITwitterAuthenticationProvider`, `TwitterAuthenticationProvider`\n  - Objetivo: Converter a interface de uma classe em outra interface que os clientes esperam. O Adapter permite que classes com interfaces incompatíveis trabalhem juntas. As classes `GoogleAuthenticationAdapter`, `FacebookAuthenticationAdapter` e `TwitterAuthenticationAdapter` são implementadas como adapters para os provedores de autenticação `GoogleAuthenticationProvider`, `FacebookAuthenticationProvider` e `TwitterAuthenticationProvider`.\n- [x] Template Method\n  - Classes participantes: `ReportTemplate`, `UserStatisticsReportTemplate`, `UserStatisticsHtmlReport`, `UserStatisticsPdfReport`\n  - Objetivo: Definir o esqueleto de um algoritmo em uma operação, postergando alguns passos para as subclasses. O Template Method permite que as subclasses redefinam certos passos de um algoritmo sem alterar a estrutura do mesmo.\n- [x] Command\n  - Classes participantes: `EventFacade`, `ICommand`, `CancelEventCommand`, `StartEventCommand`, `EndEventCommand`, `PublishEventCommand`, `EventSubscribeCommand`, `EventUnsubscribeCommand`, `GetEventSubsribersCommand`, `GetIsSubscribedCommand`\n  - Objetivo: Encapsular uma solicitação como um objeto, permitindo parametrizar clientes com diferentes solicitações.\n- [x] Observer\n  - Classes participantes: `EventFacade`, `IEventObserver`, `EventStatusLoggerObserver`\n  - Objetivo: Definir uma dependência um-para-muitos entre objetos, de maneira que quando um objeto muda de estado, todos os seus dependentes são notificados e atualizados automaticamente. O Observer define uma dependência um-para-muitos entre objetos, de maneira que quando um objeto muda de estado, todos os seus dependentes são notificados e atualizados automaticamente.\n- [x] Builder\n  - Classes participantes: `MenuBuilder`, `Menu`\n  - Objetivo: Separar a construção de um objeto complexo da sua representação, de maneira que o mesmo processo de construção possa criar diferentes representações. O Builder permite que um objeto complexo seja construído passo a passo, usando sempre o mesmo processo de construção.\n- [x] Memento\n    - Classes participantes: `EventController`, `EventMemento`, `EventMementoCaretaker`\n    - Objetivo: Sem violar o encapsulamento, capturar e externalizar um estado interno de um objeto, de maneira que o objeto possa ser restaurado para esse estado mais tarde. O Memento captura e externaliza o estado interno de um objeto, de maneira que o objeto possa ser restaurado para esse estado mais tarde.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpedrior%2Fprojeto-mps","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpedrior%2Fprojeto-mps","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpedrior%2Fprojeto-mps/lists"}