Design de software de forma robusta a para separar as cadamadas da aplicação. Como Robert C. Martin fala em seu livro: "screaming architecture!".
Coração do software, onde esta a camada de dominio e as regras do negócio
São os casos de uso, é quem vai orquestrar o dominio e seu funcionamento
É a camada onde estão api, cli e persistência.
Hoje esta app, possuí uma camda de persistência unica, com jpa(Hibernate Panache)
Aplicação quarkus onde são expostos os endpoints para a web
Aplicações espeficas para persistencia e leitura de filas
Desta forma é possivel executar os teste unitários de forma bem tranquila
- JUnit 5
mvn clean install
mvn clean install -DskipTests=true
Requerido
- Java 11+
- Maven 3+
- docker
- docker-compose
BD:
docker-compose up -d
HTTP:
mvn quarkus:dev
OPEN-API(Swagger):
http://localhost:8080/swagger-ui
CLI:
mvn quarkus:dev
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<dependency>
<groupId>jakarta.enterprise</groupId>
<artifactId>jakarta.enterprise.cdi-api</artifactId>
<version>2.0.2</version>
<scope>compile</scope>
</dependency>
Nos métodos que poderão ser injetados, anotar com:
@Named
@ApplicationScoped
public class CreateProductUseCase {}
<build>
<plugins>
<plugin>
<groupId>org.jboss.jandex</groupId>
<artifactId>jandex-maven-plugin</artifactId>
<version>1.2.2</version>
<executions>
<execution>
<id>make-index</id>
<goals>
<goal>jandex</goal>
</goals>
</execution>
</executions>
</plugin>
application.properties:
quarkus.index-dependency.usecase.group-id=com.wagnerww.cleanarch.quarkus
quarkus.index-dependency.usecase.artifact-id=usecase
mvn io.quarkus.platform:quarkus-maven-plugin:2.9.2.Final:create \
-DprojectGroupId=com.wagnerww.cleanarch.quarkus \
-DprojectArtifactId=consumer-event-sourcing \
-Dextensions="picocli"