# Builder
# Histórico de Versão
Data | Autor(es) | Descrição | Versão |
---|---|---|---|
26/10/2020 | Fábio Teixeira(fabio1079) | Adicionando utilização do builder no projeto | 0.1 |
26/10/2020 | Cauê(caue96) | Incrementando a introdução do que é o padrão builder | 0.2 |
16/11/2020 | Lucas(lucasmidlhey) | Justificativa | 0.3 |
# Introdução
O Builder é um padrão de criacional que permite construir objetos complexos. O padrão permite que você produza diferentes tipos e representações de um objeto usando o mesmo código de construção.
O padrão Builder sugere que se extraia o código de construção do objeto para fora de sua própria classe e mova ele para objetos separados chamados construtores ou builders.
# Estrutura
# Aplicações no Projeto(QRodízio)
# Disclaimer
Primeiramente é bom deixar claro que nosso projeto está utilizando de linguagens multi-paradigmas(python e javascript) sendo assim, adaptações aos padrões são necessárias para não fugir do estilo do código utilizado.
A Linguem python possui em seu "zen of python" a seguinte declaração: "Simple is better than complex". Seguindo essa filosifia, decidimos que, se algo pode ser feito em uma função, então será feito em uma função. Assim mantendo um código mais limpo, simples e fácil de manter.
# Utilização
Em nossa base de código percemos que a API estava tendo muito código repetido e verboso para instancia os models, sendo assim optamos em exportar essa instanciação mais verbosa para builders para cada model.
Uma vantagem é que esses mesmos builders acabaram por ser utilizado tanto nos comandos de ternimal quanto nos testes unitários.
Segue um exemplo de um de nossos builders:
def customer_tables_builder(**customer_table_atrrs):
customer_table = CustomerTable()
sessions_data = customer_table_atrrs["sessions"]
del customer_table_atrrs["sessions"]
for session_data in sessions_data:
session = TableSession()
for key in session_data.keys():
setattr(session, key, session_data[key])
customer_table.sessions.append(session)
for key in customer_table_atrrs.keys():
setattr(customer_table, key, customer_table_atrrs[key])
return customer_table
def employee_builder(**employee_attrs):
...
def menus_builder(**menu_attrs):
...
def demand_builder(**demand_attrs):
...
# Justificativa
Utilizar esse padrão foi de suma importancia para popular o banco de dados, tendo apenas um trabalho no inicio que foi de criar este padrão e depois para qualquer novo teste com as models foi bem mais simples em nível de código.
# Referências
- REFACTORING.GURU. Strategy. Disponível em: https://refactoring.guru/pt-br/design-patterns/builder . Acesso em: 26 de outubro. 2020.