Coder Social home page Coder Social logo

folha-reavaliacao's Introduction

Folha de Pagamento - Reavaliação

Objetivo

O objetivo do projeto é a implementação de melhorias e a identificação de code smells no projeto feito para a ab2

Code Smells

Após uma vistoria no código, foram encontrados os seguintes code smells e sua soluções adotadas.

  1. 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']
  2. 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():
  3. 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
  4. 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

Instalando Depedências

  • 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

Executando o Sistema

  • 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

folha-reavaliacao's People

Contributors

brsevero avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.