deps: Refactor dependencies (#3224)

* remove spring dep
move junit, logging, mockito under dep mgmt

* upgrade anti-corruption-layer deps

* async method invocation

* balking, bloc

* bridge to bytecode

* caching

* callback - cqrs

* component - health check

* hexagonal - metadata mapping

* rest of the patterns

* remove checkstyle, take spotless into use
This commit is contained in:
Ilkka Seppälä
2025-03-29 19:34:27 +02:00
committed by GitHub
parent 371439aeaa
commit 0ca162a55c
1863 changed files with 14408 additions and 17637 deletions
@@ -39,22 +39,22 @@ import lombok.extern.slf4j.Slf4j;
* customer-specific roles is provided by {@link CustomerRole}, which also supports the {@link
* Customer} interface.
*
* <p>The {@link CustomerRole} class is abstract and not meant to be instantiated.
* Concrete subclasses of {@link CustomerRole}, for example {@link BorrowerRole} or {@link
* InvestorRole}, define and implement the interface for specific roles. It is only these subclasses
* which are instantiated at runtime. The {@link BorrowerRole} class defines the context-specific
* view of {@link Customer} objects as needed by the loan department. It defines additional
* operations to manage the customers credits and securities. Similarly, the {@link InvestorRole}
* class adds operations specific to the investment departments view of customers. A client like
* the loan application may either work with objects of the {@link CustomerRole} class, using the
* interface class {@link Customer}, or with objects of concrete {@link CustomerRole} subclasses.
* Suppose the loan application knows a particular {@link Customer} instance through its {@link
* Customer} interface. The loan application may want to check whether the {@link Customer} object
* plays the role of Borrower. To this end it calls {@link Customer#hasRole(Role)} with a suitable
* role specification. For the purpose of our example, lets assume we can name roles with enum. If
* the {@link Customer} object can play the role named “Borrower,” the loan application will ask it
* to return a reference to the corresponding object. The loan application may now use this
* reference to call Borrower-specific operations.
* <p>The {@link CustomerRole} class is abstract and not meant to be instantiated. Concrete
* subclasses of {@link CustomerRole}, for example {@link BorrowerRole} or {@link InvestorRole},
* define and implement the interface for specific roles. It is only these subclasses which are
* instantiated at runtime. The {@link BorrowerRole} class defines the context-specific view of
* {@link Customer} objects as needed by the loan department. It defines additional operations to
* manage the customers credits and securities. Similarly, the {@link InvestorRole} class adds
* operations specific to the investment departments view of customers. A client like the loan
* application may either work with objects of the {@link CustomerRole} class, using the interface
* class {@link Customer}, or with objects of concrete {@link CustomerRole} subclasses. Suppose the
* loan application knows a particular {@link Customer} instance through its {@link Customer}
* interface. The loan application may want to check whether the {@link Customer} object plays the
* role of Borrower. To this end it calls {@link Customer#hasRole(Role)} with a suitable role
* specification. For the purpose of our example, lets assume we can name roles with enum. If the
* {@link Customer} object can play the role named “Borrower,” the loan application will ask it to
* return a reference to the corresponding object. The loan application may now use this reference
* to call Borrower-specific operations.
*/
@Slf4j
public class ApplicationRoleObject {
@@ -74,20 +74,23 @@ public class ApplicationRoleObject {
var hasInvestorRole = customer.hasRole(INVESTOR);
LOGGER.info("Customer has an investor role - {}", hasInvestorRole);
customer.getRole(INVESTOR, InvestorRole.class)
.ifPresent(inv -> {
inv.setAmountToInvest(1000);
inv.setName("Billy");
});
customer.getRole(BORROWER, BorrowerRole.class)
.ifPresent(inv -> inv.setName("Johny"));
customer
.getRole(INVESTOR, InvestorRole.class)
.ifPresent(
inv -> {
inv.setAmountToInvest(1000);
inv.setName("Billy");
});
customer.getRole(BORROWER, BorrowerRole.class).ifPresent(inv -> inv.setName("Johny"));
customer.getRole(INVESTOR, InvestorRole.class)
customer
.getRole(INVESTOR, InvestorRole.class)
.map(InvestorRole::invest)
.ifPresent(LOGGER::info);
customer.getRole(BORROWER, BorrowerRole.class)
customer
.getRole(BORROWER, BorrowerRole.class)
.map(BorrowerRole::borrow)
.ifPresent(LOGGER::info);
}
}
}