gabriel-guelfi/acmevita

Camada de serviço

Closed this issue · 2 comments

Fala Gabriel, tudo beleza?

Na aplicação da AcmeVita isso não é exatamente um problema. No entanto a medida que uma API vai crescendo a complexidade da chamada "camada de serviço" aumenta, e normalmente temos que separar ela em camadas mais especializadas. Considerando que no código abaixo temos 3 responsabilidades:

  • Deserialização (banco de dados para aplicação)
  • Regras de negócio (lógica especifica da operação)
  • Serialização (aplicação para resposta da API)

Como você reescreveria esse código pensando em responsabilidades mais bem definidas?

result = []
dbData = db.session.query(Department).all()
for department in dbData:
result.append({
"id": department.id,
"name": department.name
})
return result

Bom dia, Rafael!

Transferi a deserialização(DB -> app) para o model:

# Department entity's model
class Department(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.Text)
def listDepartments():
"This method retrieves a general list of departments from the database,"
return db.session.query(Department).all()

Mantive o loop de processamento dos dados no Service:

class DepartmentService:
# Method that list the departments:
def listDepartments():
"""
Turns a list of Department objects into a serializable dataset,
then returns it.
"""
result = []
for department in Department.listDepartments():
result.append({
"id": department.id,
"name": department.name
})
return result

E a serialização(app -> API response) já estava no arquivo de rota (routes.py):

return jsonify(DepartmentService.listDepartments())

Perfeito Gabriel,

Obrigado!