3
respostas

Dúvida nos benefícios da classe FabricaUsuario

Eu realmente não entendi os benefícios da fábrica.

Na hora de criar o usuário usando o método de criação, não acaba dando na mesma que chamar o new Object? Antes teria de mexer na instanciação, agora precisa mexer no método, deixando apenas mais uma camada de abstração?

Outra coisa, mesma coisa pra incluir dados, não seria mais simples simplesmente usar um setter ao invés do método?

3 respostas

Olá, Diogo.

Tudo bem?

À primeira vista, pode parecer que estamos apenas adicionando uma camada de complexidade desnecessária. No entanto, o padrão de fábrica oferece algumas vantagens importantes, especialmente em projetos mais complexos. Vamos explorar alguns desses benefícios:

  1. Abstração da Criação de Objetos:

    • Ao usar uma fábrica, você encapsula a lógica de criação do objeto em um único lugar. Isso significa que, se a lógica de criação mudar (por exemplo, se novos parâmetros forem adicionados ao construtor), você só precisa atualizar a fábrica, e não todas as partes do código onde o objeto é instanciado.
    • Exemplo: Se a classe Usuario passar a exigir um novo parâmetro no construtor, você só precisa atualizar a FabricaDeUsuario e não todas as instâncias de new Usuario() espalhadas pelo código.
  2. Legibilidade e Manutenção:

    • Métodos de fábrica podem ter nomes descritivos que tornam o código mais legível. Em vez de ter new Usuario(cpf, nome, nascimento, email), você pode ter fabricaUsuario.comNomeCpfNascimento(nome, cpf, nascimento), que é mais intuitivo.
    • Exemplo: Usuario usuario = fabricaUsuario.comNomeCpfNascimento("João", "12345678900", LocalDate.of(1990, 1, 1));
  3. Facilidade de Testes:

    • A fábrica pode ser facilmente mockada em testes, permitindo que você controle a criação de objetos e isole o comportamento que está sendo testado.
    • Exemplo: Em um teste, você pode substituir a fábrica real por uma fábrica mockada que retorna objetos pré-configurados.
  4. Flexibilidade e Extensibilidade:

    • A fábrica permite adicionar novas formas de criar objetos sem modificar o código existente. Você pode adicionar novos métodos na fábrica para diferentes formas de criação.
    • Exemplo: public Usuario comNomeCpfNascimentoEEmail(String nome, String cpf, LocalDate nascimento, String email)

Sobre o uso de setters, o padrão de fábrica também ajuda a evitar o uso excessivo de setters, promovendo a imutabilidade e a consistência do objeto. Ao criar o objeto de forma completa e consistente na fábrica, você minimiza o risco de ter objetos em estados inválidos.

Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.

Bom dia, Renan!

Tinha procurado alguns materiais por fora e realmente consegue entender os benefícios dessa forma. Apesar de no fim ainda ter ficado encucado com algumas situações:

  1. A professora no decorrer do curso instância o objeto e não usa o a classe, depois de ter me esforçado para entender e ver ela não usando me deixou maluco kkkkkk mas imagino que foi sem querer, no meu projeto eu usei a FabricaDeUsuario e deu tudo certo.
  2. Essa questão de não ter que mexer em todo lugar que a classe é instancia apenas na Fábrica, caso eu tenha que ter uma parâmetro adicional na Fabrica, de qualquer forma eu não teria que mexer em todos os lugares em que a fábrica é chamada?

Sim, você ainda vai precisar atualizar os lugares onde a fábrica é chamada se adicionar novos parâmetros. Mas a vantagem é que a lógica de criação do objeto fica toda centralizada na fábrica, o que facilita a manutenção e deixa o código mais organizado. Além disso, a fábrica permite criar métodos diferentes para várias combinações de parâmetros, o que dá mais flexibilidade. No fim das contas, usar a fábrica deixa tudo mais claro e fácil de gerenciar, especialmente em projetos maiores.

Espero que isso ajude a esclarecer suas dúvidas. Qualquer outra questão, estou à disposição.

Bons estudos!