FlyWeight - Motivos de denúncia
Problema
O problema consiste em: como padronizar os motivos de denúncia ao longo de todo o contexto da aplicação desde a API ao Front-end.
Solução
Uma solução possível seria utilizar uma abordagem semelhante a FlyWeight criando uma Model para conter o motivo da denúncia. De tal modo considera-se a denúncia como sendo o estado extrínseco, pois este é mutável, e os motivos de denúncia, que a príncipio eram referenciados como atributos, agora podem ser considerados como estado intrínseco a todas as denúncias.
Fazendo assim a relação motivo de denúncia, tornar-se um relacionamento, deste modo, padronizam-se os motivos de denúncia. Inclusive podendo os usar para a criação de novas denúncias no Front-end pois como estão padronizadas, irão conter o texto da denúncia em si. Não somente, é possível alterar, inserir e até excluir (desde que os relacionamentos sejam trocados) motivos de denúncia em todo o contexto da aplicação.
Diferente do FlyWeight original este não acontece na memória RAM, e sim no Banco de Dados. Da mesma forma poupa armazenamento do banco, por não ter que ficar repetindo atributos de texto que muitas vezes são iguais.
Modelagem
Código
class Reason(models.Model):
text = TextField(unique=True)
pass
class Report(models.Model):
creator = ForeignKey(User)
reported = ForeignKey(User)
reason = OneToOneField(Reason)
date = DateField()
comment = TextField() # aqui deverá ir o comentário que servirá também como motivo caso seja marcado o motivo como 'outros'
também sendo necessária uma Serializer, que também pode se comportar como uma FlyWeightFactory, e uma View para que os motivos possam ser servidos pelo Back-end.
Versionamento
Versão | Data | Modificação | Motivo | Autor |
---|---|---|---|---|
1.0 | 04/04/2021 | Criação do documento | Listar o problema de padronização dos motivos | Todos os integrantes |
1.1 | 08/04/2021 | Alteração da solução e inclusão da modelagem | Para que esteja documentado a modelagem do GOF | Marcelo Victor |