Dica Java: Functional Interface #001

É bem comum no desenvolvimento de aplicações Java termos injeções de dependências de uma mesma bean em diferentes locais e em muitas vezes em relações entre beans como nos exemplos abaixo:

@Service
@RequiredArgsConstructor
public class PersonUpdater…


This content originally appeared on DEV Community and was authored by Igor Rudel

É bem comum no desenvolvimento de aplicações Java termos injeções de dependências de uma mesma bean em diferentes locais e em muitas vezes em relações entre beans como nos exemplos abaixo:

@Service
@RequiredArgsConstructor
public class PersonUpdater {

    private final PersonValidator validator;
    private final DocumentService documentService; //outras utilizações no fluxo de atualização

    public Person toUpdate(final Person person) {
        validator.validate(person);

        //...fluxo de atualização de pessoa

        return person;
    }
}
@Component
@RequiredArgsConstructor
public class PersonValidator {

    private final DocumentService documentService;

    public void validate(final Person person) {
        if (person.isAdult() && person.isMale()) {
            final var documents = documentService.getMilitaryDocuments(person.getId());

            //validações necessárias
        }
    }
}

A bean DocumentService foi injetada tanto em PersonUpdater como em PersonValidator. Na PersonUpdater a bean pode ser utilizado para outros fluxos da atualização, porém, na PersonValidator a bean será APENAS utilizada para a busca de documentos militares QUANDO for a atualização de uma pessoa do gênero masculino e maior de idade. Uma possibilidade de ter o mesmo resultado são os exemplos abaixo:

@Service
@RequiredArgsConstructor
public class PersonUpdater {

    private final PersonValidator validator;
    private final DocumentService documentService; //outras utilizações no fluxo de atualização

    public Person toUpdate(final Person person) {
        validator.validate(person, () -> documentService.getMilitaryDocuments(person.getId()));

        //...fluxo de atualização de pessoa

        return person;
    }
}
@Component
@RequiredArgsConstructor
public class PersonValidator {

    public void validate(final Person person,
                         final Supplier<List<Document>> documentsSupplier) {
        if (person.isAdult() && person.isMale()) {
            final var documents = documentsSupplier.get();

            //validações necessárias
        }
    }
}

Com as Interfaces Funcionais, abre-se um leque de opções de utilizações de comportamentos de uma aplicação Java! Elas flexibilizam a utilização via argumento de método (como no exemplo) e via atributo de alguma classe.

Além da injeção de dependência ser feito apenas em um local, temos:

  • diminuir o acoplamento do validador
  • aumentar a flexibilidade do método


This content originally appeared on DEV Community and was authored by Igor Rudel


Print Share Comment Cite Upload Translate Updates
APA

Igor Rudel | Sciencx (2024-09-23T20:34:17+00:00) Dica Java: Functional Interface #001. Retrieved from https://www.scien.cx/2024/09/23/dica-java-functional-interface-001/

MLA
" » Dica Java: Functional Interface #001." Igor Rudel | Sciencx - Monday September 23, 2024, https://www.scien.cx/2024/09/23/dica-java-functional-interface-001/
HARVARD
Igor Rudel | Sciencx Monday September 23, 2024 » Dica Java: Functional Interface #001., viewed ,<https://www.scien.cx/2024/09/23/dica-java-functional-interface-001/>
VANCOUVER
Igor Rudel | Sciencx - » Dica Java: Functional Interface #001. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/09/23/dica-java-functional-interface-001/
CHICAGO
" » Dica Java: Functional Interface #001." Igor Rudel | Sciencx - Accessed . https://www.scien.cx/2024/09/23/dica-java-functional-interface-001/
IEEE
" » Dica Java: Functional Interface #001." Igor Rudel | Sciencx [Online]. Available: https://www.scien.cx/2024/09/23/dica-java-functional-interface-001/. [Accessed: ]
rf:citation
» Dica Java: Functional Interface #001 | Igor Rudel | Sciencx | https://www.scien.cx/2024/09/23/dica-java-functional-interface-001/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.