PHP Classes

How to Implement a PHP Facade Class to Separate the Service from the Implementation Classes Learning from the Package Facade: Service classes using the Facade design pattern

Recommend this page to a friend!
  Info   Documentation   View files Files   Install with Composer Install with Composer   Download Download   Reputation   Support forum   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2024-10-07 (4 months ago) RSS 2.0 feedNot enough user ratingsTotal: 30 All time: 11,160 This week: 49Up
Version License PHP version Categories
facade 1.0.0MIT/X Consortium ...5PHP 5, Language, Design Patterns
Description 

Author

This package implements service classes using the Facade design pattern.

It provides a login facade class that calls classes that implementat services.

Currently, it provides service classes for:

- User authentication

- Email verification sending

- Validation code generation

- Log generation

- User token generation

Picture of Rodrigo Faustino
  Performance   Level  
Innovation award
Innovation award
Nominee: 23x

Winner: 3x

 

Documentation

Implementação do Padrão Facade em um Sistema de Login com Verificação de Código

  1. Estrutura do Sistema ## Subsistemas Complexos:
  • AuthService: Autentica as credenciais do usuário.
  • EmailService: Envia códigos de verificação por e-mail.
  • CodeService: Gera e valida códigos de verificação.
  • TokenService: Gera tokens JWT.
  • LogService: Registra logs de acesso.

Facade:

  • LoginFacade: Encapsula a interação com os subsistemas para realizar o processo de login completo.

Processo de Login sem Facade

Sem o Padrão Facade, o controlador de login precisaria interagir diretamente com cada subsistema:

Autenticar o Usuário:

  • Verificar as credenciais no AuthService. ### Gerar e Enviar Código:
  • Gerar o código no CodeService.
  • Enviar o código via EmailService. ### Validar o Código:
  • Validar o código no CodeService. ### Gerar Token:
  • Gerar o token JWT no TokenService. ### Registrar Log:
  • Registrar cada ação no LogService. Isso resultaria em um controlador com múltiplas responsabilidades, aumentando a complexidade e o acoplamento.

Processo de Login com Facade

Com o Padrão Facade, toda essa lógica é encapsulada na LoginFacade, proporcionando uma interface única e simplificada para o controlador de login:

Chamar loginFacade->login($username, $password, $email):

  • Internamente, autentica o usuário.
  • Gera e envia o código de verificação.
  • Registra os logs correspondentes. ### Chamar loginFacade->confirmCode($username, $code):
  • Valida o código de verificação.
  • Gera o token JWT.
  • Registra os logs correspondentes. ### Chamar loginFacade->logout($username) (opcional):
  • Registra o logout.

Vantagens:

  • Simplificação: O controlador lida apenas com a fachada, sem precisar conhecer os detalhes dos subsistemas.
  • Desacoplamento: Mudanças nos subsistemas não afetam o controlador, desde que a interface da fachada permaneça a mesma.
  • Centralização: Toda a lógica de login está centralizada na fachada, facilitando manutenção e extensão.

UML

+----------------+          +----------------+          +-----------------------+
|  LoginFacade   |<>------->|  AuthService   |          | EmailService          |
+----------------+          +----------------+          +-----------------------+
| +login()       |          | +authenticate()|          | +sendVerificationCode()|
| +confirmCode() |          +----------------+          +-----------------------+
| +logout()      |                                            |
+----------------+            +----------------+          +----------------+
            |                 | CodeService    |          | TokenService   |
            |                 +----------------+          +----------------+
            |                        |
            |                        |
            |                        |
            |                 +----------------+
            |                 | LogService     |
            |                 +----------------+
            |
            |
            v
    +----------------+
    |    Controller  |
    +----------------+
    | +login()       |
    | +confirmCode() |
    +----------------+

Considerações Finais

O conteudo do repositório é experimental como um modelo apenas para exemplificar em uma aula sobre padrões de projeto e é apenas um modelo que precisa ser expandido. O uso do Padrão Facade neste contexto de login:

Simplifica o controlador, que agora lida apenas com a fachada e não com múltiplos subsistemas. Desacopla os componentes, permitindo alterações internas sem impactar o controlador. Centraliza a lógica de login, facilitando manutenção e extensão.

Recursos Adicionais

  • Documentação do Firebase JWT: Firebase PHP-JWT
  • Livros: Design Patterns: Elements of Reusable Object-Oriented Software por Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides (Gang of Four).
  • Sites: Refactoring Guru SourceMaking

  Files folder image Files (34)  
File Role Description
Files folder imagebackend (1 directory)
Files folder imagevendor (1 file, 2 directories)
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file composer.lock Data Auxiliary data
Accessible without login Plain text file index.php Example Example script
Accessible without login Plain text file readme.md Doc. Documentation

The PHP Classes site has supported package installation using the Composer tool since 2013, as you may verify by reading this instructions page.
Install with Composer Install with Composer
 Version Control Unique User Downloads Download Rankings  
 100%
Total:30
This week:0
All time:11,160
This week:49Up