- Notifications
You must be signed in to change notification settings - Fork7
Python implementation of Domain Notification Pattern
fazedordecodigo/PyFlunt
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
PORTUGUÊS |ENGLISH
Implementação Python inspirada noFlunt (.NET)
Flunt te auxilia a implementar Domain Notification Pattern em sua aplicação para centralizar erros e mudanças em determinadas ações e entidades.
Flunt surgiu de duas necessidades: implementar o Domain Notification Pattern para substituir exceções no nível de domínio da aplicação e reduzir a quantidade de IFs (complexidade) usando uma abordagem baseada em contratos.
Assim, basicamente o que o Flunt faz é adicionar uma lista de Notificações à sua classe e vários métodos para interagir com ela.
pip install flunt
ONotifiable
é a classe base que fornece funcionalidades para armazenar e gerenciar notificações:
fromflunt.notifications.notifiableimportNotifiableclassNome(Notifiable):def__init__(self,nome):super().__init__()iflen(nome)<3:self.add_notification(field='nome',message='Nome deve ter pelo menos 3 caracteres')self._nome=nome
OContract
fornece métodos para validações encadeadas:
"""Módulo de exemplo com Objetos de Valor."""fromflunt.notifications.notifiableimportNotifiablefromflunt.validations.contractimportContractclassPessoa(Notifiable):"""Classe Objeto de Valor Pessoa."""def__init__(self,primeiro_nome,ultimo_nome,email):"""Construtor da classe."""super().__init__()self.primeiro_nome=primeiro_nomeself.ultimo_nome=ultimo_nomeself.email=email# Criando um contrato de validaçãocontract= (Contract() .requires(self.primeiro_nome,"primeiro nome","Nome é obrigatório") .requires(self.ultimo_nome,"ultimo nome","Sobrenome é obrigatório") .requires(self.email,"email","E-mail é obrigatório") .is_lower_than(self.primeiro_nome,3,"primeiro_nome","Nome deve ter no mínimo 3 caracteres", ) .is_lower_than(self.ultimo_nome,3,"ultimo_nome","Sobrenome deve ter no mínimo 3 caracteres", ) .is_email(self.email,"email","E-mail inválido") )# Adicionando as notificações do contrato à entidadeself.add_notifications(contract.get_notifications())# Exemplo de usopessoa=Pessoa("Alfredo","Biscoito","alfredo@biscoito.com")ifnotpessoa.is_valid:fornotificationinpessoa.get_notifications():print(notification)else:print("Validado com sucesso!")
Consulte nosso DevGuide no link a seguir:CONTRIBUTING
Consulte nosso registro de alterações no link a seguir:CHANGELOG
Este projeto contém a licença MIT. Consulte o arquivoLICENSE.
About
Python implementation of Domain Notification Pattern