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 (Yesterday) RSS 2.0 feedNot enough user ratingsTotal: 1 This week: 1All time: 11,457 This week: 41Up
Version License PHP version Categories
facade 1.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  
Name: Rodrigo Faustino <contact>
Classes: 27 packages by
Country: Brazil Brazil
Innovation award
Innovation award
Nominee: 17x

Winner: 2x

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

  Files folder image Files (34)  /  backend  
File Role Description
Files folder imageServices (6 files)

  Files folder image Files (34)  /  backend  /  Services  
File Role Description
  Plain text file AuthService.php Class Class source
  Plain text file CodeService.php Class Class source
  Plain text file EmailService.php Class Class source
  Plain text file LoginFacade.php Class Class source
  Plain text file LogService.php Class Class source
  Plain text file TokenService.php Class Class source

  Files folder image Files (34)  /  vendor  
File Role Description
Files folder imagecomposer (11 files)
Files folder imagefirebase (1 directory)
  Accessible without login Plain text file autoload.php Aux. Configuration script

  Files folder image Files (34)  /  vendor  /  composer  
File Role Description
  Accessible without login Plain text file autoload_classmap.php Aux. Configuration script
  Accessible without login Plain text file autoload_namespaces.php Aux. Configuration script
  Accessible without login Plain text file autoload_psr4.php Aux. Configuration script
  Plain text file autoload_real.php Class Class source
  Plain text file autoload_static.php Class Class source
  Plain text file ClassLoader.php Class Class source
  Accessible without login Plain text file installed.json Data Auxiliary data
  Accessible without login Plain text file installed.php Aux. Configuration script
  Plain text file InstalledVersions.php Class Class source
  Accessible without login Plain text file LICENSE Lic. License text
  Accessible without login Plain text file platform_check.php Aux. Configuration script

  Files folder image Files (34)  /  vendor  /  firebase  
File Role Description
Files folder imagephp-jwt (4 files, 1 directory)

  Files folder image Files (34)  /  vendor  /  firebase  /  php-jwt  
File Role Description
Files folder imagesrc (8 files)
  Accessible without login Plain text file CHANGELOG.md Data Auxiliary data
  Accessible without login Plain text file composer.json Data Auxiliary data
  Accessible without login Plain text file LICENSE Lic. License text
  Accessible without login Plain text file README.md Doc. Documentation

  Files folder image Files (34)  /  vendor  /  firebase  /  php-jwt  /  src  
File Role Description
  Plain text file BeforeValidException.php Class Class source
  Plain text file CachedKeySet.php Class Class source
  Plain text file ExpiredException.php Class Class source
  Plain text file JWK.php Class Class source
  Plain text file JWT.php Class Class source
  Plain text file JWTExceptionWithPayloadInterface.php Class Class source
  Plain text file Key.php Class Class source
  Plain text file SignatureInvalidException.php Class Class source

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:1
This week:1
All time:11,457
This week:41Up