O objetivo do projeto é a implementação de melhorias e a identificação de code smells no projeto feito para a ab2
Após uma vistoria no código, foram encontrados os seguintes code smells e sua soluções adotadas.
-
Duplicated Code
- No arquivo admin.py contem duas listas, fields e list_display que são usadas por todas as classes repetidamente, essas listas representam os campos mostrados ao admin em vários momentos e muda-se pouca coisa em cada classe, logo temos código duplicado.
- Antes:
fields = ['nome', 'endereco', 'sindicato', 'salario', 'metodo_de_pagamento', 'dia_do_pagamento'] list_display = ['nome', 'endereco', 'sindicato', 'salario', 'metodo_de_pagamento', 'dia_do_pagamento','pagamento']
- Foi usado Data Clamp para resolver esse code smell, criando uma lista inicial que é concatenada com os dados específicos que serão mostrados
- Agora:
campos = ['nome', 'endereco', 'sindicato', 'salario', 'metodo_de_pagamento'] lista_de_campos = ['nome', 'endereco', 'sindicato', 'salario', 'metodo_de_pagamento','pagamento']
-
Long parameter list
- Há uma longa lista de parâmetros para o método save_model, responsável por salvar o objeto no banco de dados
- Antes:
def save_model(self, request, obj, form, change):
- Esse code Smell foi resolvido retirando essa lista
- Agora
def save_model():
-
Shotgun Surgery
- A classe Empregado em models.py possuia muitos atributos e era de difícil manutenção, ela foi encurtada retirando o atributo salario, que era a maior causa de dificuldades no projeto, e colocando-o em suas classes filhas. Agora a manutenção das classes filhas está facilitada.
- Antes
class Empregado(models.Model): class Meta: abstract = True METODO = [ ('1','Cheque Em Maos'), ('2','Cheque no Correio'), ('3','Deposito em Conta') ] nome = models.CharField(max_length=100) endereco = models.CharField(max_length=100) sindicato = models.ForeignKey(Sindicato,on_delete=models.CASCADE,blank=True,null=True) salario = models.FloatField(default=1000) metodo_de_pagamento = models.CharField(max_length=25,choices=METODO,default='1') pagamento = models.FloatField(blank=True,null=True,default=0) def __str__(self): return self.nome
class Empregado(models.Model): class Meta: abstract = True METODO = [('1','Cheque Em Maos'),('2','Cheque no Correio'),('3','Deposito em Conta')] nome = models.CharField(max_length=100) endereco = models.CharField(max_length=100) sindicato = models.ForeignKey(Sindicato,on_delete=models.CASCADE,blank=True,null=True) metodo_de_pagamento = models.CharField(max_length=25,choices=METODO,default='1') pagamento = models.FloatField(blank=True,null=True,default=0) def __str__(self): return self.nome
-
Outros
- Foram mudados alguns retornos de str de algumas classes para melhor vizualização no sistema e do programador
- Foram removidas as variáveis que não eram usadas
- O sistema foi criado em Python 3.9.5, então é necessário a linguagem Python para funcionar
- Execute o comando abaixo na pasta do projeto
- Recomendo a criação de um ambiente virtual para isso. Pode-se ler mais sobre aqui.
pip install -r requirements.txt
- O sistema foi criado com o framework Django
- Basta executar o comando abaixo na pasta onde se encontra o arquivo manage.py e usar a senha e login de administrador
- Login: admin
- Senha: admin
python manage.py runserver