generated from UnBArqDsw2024-1/RepositoryTemplate
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' of https://github.com/UnBArqDsw2024-1/2024.1_G7_M…
- Loading branch information
Showing
21 changed files
with
604 additions
and
2 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
92 changes: 92 additions & 0 deletions
92
docs/ArquiteturaReutilizacao/4.2.2.ChainsOfResponsibility.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
# Reutilização | ||
|
||
# Chains Of Responsibility | ||
|
||
## Objetivo | ||
|
||
Na terceira entrega do projeto fomos introduzidos aos Gofs, que são padrões de design amplamente utilizados por desenvolvedores para criar software mais flexível, reutilizável e de fácil manutenção. Dentre eles estão os GoFs comportamentais que se concentram na interação entre objetos. Nesse sentido um dos Gofs comportamentais utilizados foi o **Chains Of Responsibility** que é um padrão que permite que um pedido seja processado por uma cadeia de handlers (manipuladores), onde cada handler tem a oportunidade de processar o pedido ou passá-lo para o próximo na cadeia. | ||
|
||
Tendo isso em vista, para o projeto My Market um pedido precisa passar por um processamento até ser confirmado a venda. Logo, o padrão **Chains Of Responsibility** foi utilizado para a implementação dessa funcionalidade assim como é apresentado no diagrama abaixo, modelado utilizando a ferramenta online [Lucidchart](https://www.lucidchart.com/pages/) pelos alunos [Mateus Orlando](https://github.com/MateusPy), [Pedro Lucas](https://github.com/AlefMemTav) e [Thiago Vivan](https://github.com/thiago-vivan): | ||
|
||
![image](https://github.com/user-attachments/assets/767e17d8-0009-4954-a945-230d875ed61e) | ||
|
||
<h6 align = "center">Figura 01: Diagrama de Classes utilizando o padrão comportamental Chains of Responsibility. Fonte: Mateus Orlando, Pedro Lucas e Thiago Vivan.</h6> | ||
|
||
O padrão Strategy define uma família de algoritmos, encapsula cada um deles e os torna intercambiáveis. No caso do validador de CPF, você pode implementar o padrão Strategy se desejar ter diferentes métodos de validação que podem ser aplicados de acordo com a necessidade. | ||
|
||
|
||
Neste sentido, criaremos diferentes estratégias para validar o CPF de um usuário: | ||
|
||
## Código | ||
|
||
O código em java a seguir foi desenvolvido pelos alunos [Mateus Orlando](https://github.com/MateusPy), [Pedro Lucas](https://github.com/AlefMemTav) e [Thiago Vivan](https://github.com/thiago-vivan). | ||
|
||
### 1. Interface | ||
|
||
A interface Handler, apresentada na figura 02 abaixo, abstrai a lógica de encadeamento e processamento dos handlers, permitindo que cada implementação concreta de um handler se concentre em sua lógica específica. | ||
|
||
![image](https://github.com/user-attachments/assets/191fb79c-9aee-4591-828a-27673fc534f4) | ||
|
||
<h6 align = "center">Figura 02: Interface Handler. Fonte: Mateus Orlando.</h6> | ||
|
||
### 2. Classe BaseHandler | ||
|
||
A classe BaseHandler, apresentada na figura 03 abaixo, serve como uma base para outros handlers. Ao implementar a lógica de encadeamento aqui, as subclasses podem se concentrar apenas em suas responsabilidades específicas, reutilizando o código de encadeamento. | ||
|
||
![image](https://github.com/user-attachments/assets/ca68867f-ce0d-4338-ba8e-574d430e4647) | ||
|
||
<h6 align = "center">Figura 03: Classe BaseHandler. Fonte: Mateus Orlando.</h6> | ||
|
||
### 3. Classe EstoqueHandler | ||
|
||
A classe EstoqueHandler, apresentada na figura 04 abaixo, lida com a primeira etapa do processo de validação do pedido (verificação de estoque). Se o estoque for suficiente, o pedido segue para o próximo handler na cadeia. | ||
|
||
![image](https://github.com/user-attachments/assets/5db8b08b-0680-4151-b455-75ae7106e098) | ||
|
||
<h6 align = "center">Figura 04: Classe EstoqueHandler. Fonte: Mateus Orlando.</h6>> | ||
|
||
### 4. Classe PagamentoHandler | ||
|
||
A classe PagamentoHandler, apresentada na figura 05 abaixo, lida com a segunda etapa do processo de validação do pedido (validação de pagamento). Se o pagamento for validado, o pedido segue para o próximo handler na cadeia. | ||
|
||
![image](https://github.com/user-attachments/assets/97adf628-0b7a-48ec-9feb-1b1eb7db0d90) | ||
|
||
<h6 align = "center">Figura 05: Classe PagamentoHandler. Fonte: Mateus Orlando.</h6> | ||
|
||
### 5. Classe GerenteHandler | ||
|
||
A classe GerenteHandler, apresentada na figura 06 abaixo, lida com a etapa final do processo de validação do pedido (aprovação gerencial). Se o pedido for aprovado pelo gerente, ele pode ser finalizado ou continuar na cadeia, se necessário. | ||
|
||
![image](https://github.com/user-attachments/assets/62c5d26f-0193-4e8b-9bfe-59421ee286e4) | ||
|
||
<h6 align = "center">Figura 06: Classe GerenteHandler. Fonte: Mateus Orlando.</h6> | ||
|
||
### 6. Classe Request | ||
|
||
A classe Request, apresentada na figura 07 abaixo, encapsula os dados que precisam ser verificados em cada etapa do processo. Cada handler acessa esses dados para determinar se o pedido deve ser processado ou rejeitado. | ||
|
||
![image](https://github.com/user-attachments/assets/469b9764-2f76-4207-b084-1d779d8d205a) | ||
|
||
<h6 align = "center">Figura 07: Classe Request. Fonte: Mateus Orlando.</h6> | ||
|
||
### 7. Exemplo de Uso | ||
|
||
Para testar a funcionalidade, fizemos o teste apresentado abaixo na figura 08 e 09. | ||
|
||
![image](https://github.com/user-attachments/assets/dee94c50-fb71-482e-b370-887b5fb3c4b6) | ||
|
||
<h6 align = "center">Figura 08: Classe ChainOfResponsibility que testa a funcionalidade. Fonte: Mateus Orlando.</h6> | ||
|
||
![image](https://github.com/user-attachments/assets/528a42b2-d0aa-4a2f-9f9a-f4f0dfb21cd2) | ||
|
||
<h6 align = "center">Figura 09: Resultado do teste. Fonte: Mateus Orlando.</h6> | ||
|
||
**Manual do teste: [clique aqui](https://github.com/UnBArqDsw2024-1/2024.1_G7_My_Market/blob/reutilizacaoMateus/docs/ArquiteturaReutilizacao/ChainsOfResponsibility/comoRodar.md)** | ||
|
||
## Versionamento | ||
|
||
| Versão | Alteração | Responsável | Revisor | Data de realização | | ||
| :------: | :---: | :-----: | :----: | :----: | | ||
| 1.0 | Criação do código | [Mateus Orlando](https://github.com/MateusPy) | 22/07/2024 | | ||
| 2.0 | Documentação do código de Processo de pagamento | [Mateus Orlando](https://github.com/MateusPy) | 14/08/2024 | | ||
| 2.1 | Adição das imagens ao documento | [Mateus Orlando](https://github.com/MateusPy) | 14/08/2024 | |
File renamed without changes.
19 changes: 19 additions & 0 deletions
19
docs/ArquiteturaReutilizacao/ChainsOfResponsibility/BaseHandler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package ChainsOfResponsibility; | ||
|
||
public abstract class BaseHandler implements Handler { | ||
private Handler nextHandler; | ||
|
||
@Override | ||
public Handler setNext(Handler handler) { | ||
this.nextHandler = handler; | ||
return handler; | ||
} | ||
|
||
@Override | ||
public String handle(Request request) { | ||
if (this.nextHandler != null) { | ||
return this.nextHandler.handle(request); | ||
} | ||
return null; | ||
} | ||
} |
47 changes: 47 additions & 0 deletions
47
docs/ArquiteturaReutilizacao/ChainsOfResponsibility/ChainOfResponsibilityTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package ChainsOfResponsibility; | ||
|
||
public class ChainOfResponsibilityTest { | ||
public static void main(String[] args) { | ||
// Criar os handlers | ||
Handler estoqueHandler = new EstoqueHandler(); | ||
Handler pagamentoHandler = new PagamentoHandler(); | ||
Handler gerenteHandler = new GerenteHandler(); | ||
|
||
// Configurar a cadeia de responsabilidade | ||
estoqueHandler.setNext(pagamentoHandler).setNext(gerenteHandler); | ||
|
||
// Criar um objeto de request que passará pela cadeia | ||
Request request1 = new Request(); | ||
request1.setEstoqueDisponivel(true); | ||
request1.setPagamentoValidado(true); | ||
request1.setAprovadoPeloGerente(true); | ||
|
||
// Teste 1: Todos os passos são bem-sucedidos | ||
System.out.println("Teste 1: " + estoqueHandler.handle(request1)); // Esperado: cadeia completa sem rejeições | ||
|
||
// Teste 2: Estoque insuficiente | ||
Request request2 = new Request(); | ||
request2.setEstoqueDisponivel(false); | ||
request2.setPagamentoValidado(true); | ||
request2.setAprovadoPeloGerente(true); | ||
|
||
System.out.println("Teste 2: " + estoqueHandler.handle(request2)); // Esperado: Pedido rejeitado: estoque insuficiente. | ||
|
||
// Teste 3: Pagamento não validado | ||
Request request3 = new Request(); | ||
request3.setEstoqueDisponivel(true); | ||
request3.setPagamentoValidado(false); | ||
request3.setAprovadoPeloGerente(true); | ||
|
||
System.out.println("Teste 3: " + estoqueHandler.handle(request3)); // Esperado: Pedido rejeitado: pagamento não validado. | ||
|
||
// Teste 4: Não aprovado pelo gerente | ||
Request request4 = new Request(); | ||
request4.setEstoqueDisponivel(true); | ||
request4.setPagamentoValidado(true); | ||
request4.setAprovadoPeloGerente(false); | ||
|
||
System.out.println("Teste 4: " + estoqueHandler.handle(request4)); // Esperado: Pedido rejeitado: não aprovado pelo gerente. | ||
} | ||
} | ||
|
13 changes: 13 additions & 0 deletions
13
docs/ArquiteturaReutilizacao/ChainsOfResponsibility/EstoqueHandler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package ChainsOfResponsibility; | ||
|
||
public class EstoqueHandler extends BaseHandler { | ||
@Override | ||
public String handle(Request request) { | ||
if (request.isEstoqueDisponivel()) { | ||
System.out.println("Estoque verificado."); | ||
return super.handle(request); | ||
} else { | ||
return "Pedido rejeitado: estoque insuficiente."; | ||
} | ||
} | ||
} |
13 changes: 13 additions & 0 deletions
13
docs/ArquiteturaReutilizacao/ChainsOfResponsibility/GerenteHandler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package ChainsOfResponsibility; | ||
|
||
public class GerenteHandler extends BaseHandler { | ||
@Override | ||
public String handle(Request request) { | ||
if (request.isAprovadoPeloGerente()) { | ||
System.out.println("Aprovado pelo gerente."); | ||
return super.handle(request); | ||
} else { | ||
return "Pedido rejeitado: não aprovado pelo gerente."; | ||
} | ||
} | ||
} |
6 changes: 6 additions & 0 deletions
6
docs/ArquiteturaReutilizacao/ChainsOfResponsibility/Handler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
package ChainsOfResponsibility; | ||
|
||
public interface Handler { | ||
Handler setNext(Handler handler); | ||
String handle(Request request); | ||
} |
13 changes: 13 additions & 0 deletions
13
docs/ArquiteturaReutilizacao/ChainsOfResponsibility/PagamentoHandler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package ChainsOfResponsibility; | ||
|
||
public class PagamentoHandler extends BaseHandler { | ||
@Override | ||
public String handle(Request request) { | ||
if (request.isPagamentoValidado()) { | ||
System.out.println("Pagamento validado."); | ||
return super.handle(request); | ||
} else { | ||
return "Pedido rejeitado: pagamento não validado."; | ||
} | ||
} | ||
} |
31 changes: 31 additions & 0 deletions
31
docs/ArquiteturaReutilizacao/ChainsOfResponsibility/Request.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
package ChainsOfResponsibility; | ||
|
||
public class Request { | ||
private boolean estoqueDisponivel; | ||
private boolean pagamentoValidado; | ||
private boolean aprovadoPeloGerente; | ||
|
||
public boolean isEstoqueDisponivel() { | ||
return estoqueDisponivel; | ||
} | ||
|
||
public void setEstoqueDisponivel(boolean estoqueDisponivel) { | ||
this.estoqueDisponivel = estoqueDisponivel; | ||
} | ||
|
||
public boolean isPagamentoValidado() { | ||
return pagamentoValidado; | ||
} | ||
|
||
public void setPagamentoValidado(boolean pagamentoValidado) { | ||
this.pagamentoValidado = pagamentoValidado; | ||
} | ||
|
||
public boolean isAprovadoPeloGerente() { | ||
return aprovadoPeloGerente; | ||
} | ||
|
||
public void setAprovadoPeloGerente(boolean aprovadoPeloGerente) { | ||
this.aprovadoPeloGerente = aprovadoPeloGerente; | ||
} | ||
} |
21 changes: 21 additions & 0 deletions
21
docs/ArquiteturaReutilizacao/ChainsOfResponsibility/comoRodar.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
# Passo a Passo para testar o validador | ||
|
||
1 - vá ao diretório ArquiteturaReutilizacao | ||
|
||
2 - compile os arquivos através do código: | ||
|
||
``` | ||
javac ChainsOfResponsibility/*.java | ||
``` | ||
|
||
3 - Execute a classe teste ChainOfResponsibilityTest: | ||
|
||
``` | ||
java ChainsOfResponsibility.ChainOfResponsibilityTest | ||
``` | ||
|
||
## **Obs**: Após a compilação, certifique-se de que os arquivos .class estão no diretório ChainsOfResponsibility. O Java precisa encontrar a classe compilada no mesmo diretório indicado pelo pacote, semelhante a imagem abaixo: | ||
|
||
![image](https://github.com/user-attachments/assets/e6089d29-6616-4230-a6ef-cb30540167a7) | ||
|
||
<h6 align = "center">Figura 01: Arquivos ".class". Fonte: Mateus Orlando</h6> |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
19 changes: 19 additions & 0 deletions
19
docs/PadroesDeProjeto/src/ChainsOfResponsibility/BaseHandler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package ChainsOfResponsibility; | ||
|
||
public abstract class BaseHandler implements Handler { | ||
private Handler nextHandler; | ||
|
||
@Override | ||
public Handler setNext(Handler handler) { | ||
this.nextHandler = handler; | ||
return handler; | ||
} | ||
|
||
@Override | ||
public String handle(Request request) { | ||
if (this.nextHandler != null) { | ||
return this.nextHandler.handle(request); | ||
} | ||
return null; | ||
} | ||
} |
47 changes: 47 additions & 0 deletions
47
docs/PadroesDeProjeto/src/ChainsOfResponsibility/ChainOfResponsibilityTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package ChainsOfResponsibility; | ||
|
||
public class ChainOfResponsibilityTest { | ||
public static void main(String[] args) { | ||
// Criar os handlers | ||
Handler estoqueHandler = new EstoqueHandler(); | ||
Handler pagamentoHandler = new PagamentoHandler(); | ||
Handler gerenteHandler = new GerenteHandler(); | ||
|
||
// Configurar a cadeia de responsabilidade | ||
estoqueHandler.setNext(pagamentoHandler).setNext(gerenteHandler); | ||
|
||
// Criar um objeto de request que passará pela cadeia | ||
Request request1 = new Request(); | ||
request1.setEstoqueDisponivel(true); | ||
request1.setPagamentoValidado(true); | ||
request1.setAprovadoPeloGerente(true); | ||
|
||
// Teste 1: Todos os passos são bem-sucedidos | ||
System.out.println("Teste 1: " + estoqueHandler.handle(request1)); // Esperado: cadeia completa sem rejeições | ||
|
||
// Teste 2: Estoque insuficiente | ||
Request request2 = new Request(); | ||
request2.setEstoqueDisponivel(false); | ||
request2.setPagamentoValidado(true); | ||
request2.setAprovadoPeloGerente(true); | ||
|
||
System.out.println("Teste 2: " + estoqueHandler.handle(request2)); // Esperado: Pedido rejeitado: estoque insuficiente. | ||
|
||
// Teste 3: Pagamento não validado | ||
Request request3 = new Request(); | ||
request3.setEstoqueDisponivel(true); | ||
request3.setPagamentoValidado(false); | ||
request3.setAprovadoPeloGerente(true); | ||
|
||
System.out.println("Teste 3: " + estoqueHandler.handle(request3)); // Esperado: Pedido rejeitado: pagamento não validado. | ||
|
||
// Teste 4: Não aprovado pelo gerente | ||
Request request4 = new Request(); | ||
request4.setEstoqueDisponivel(true); | ||
request4.setPagamentoValidado(true); | ||
request4.setAprovadoPeloGerente(false); | ||
|
||
System.out.println("Teste 4: " + estoqueHandler.handle(request4)); // Esperado: Pedido rejeitado: não aprovado pelo gerente. | ||
} | ||
} | ||
|
13 changes: 13 additions & 0 deletions
13
docs/PadroesDeProjeto/src/ChainsOfResponsibility/EstoqueHandler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package ChainsOfResponsibility; | ||
|
||
public class EstoqueHandler extends BaseHandler { | ||
@Override | ||
public String handle(Request request) { | ||
if (request.isEstoqueDisponivel()) { | ||
System.out.println("Estoque verificado."); | ||
return super.handle(request); | ||
} else { | ||
return "Pedido rejeitado: estoque insuficiente."; | ||
} | ||
} | ||
} |
13 changes: 13 additions & 0 deletions
13
docs/PadroesDeProjeto/src/ChainsOfResponsibility/GerenteHandler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package ChainsOfResponsibility; | ||
|
||
public class GerenteHandler extends BaseHandler { | ||
@Override | ||
public String handle(Request request) { | ||
if (request.isAprovadoPeloGerente()) { | ||
System.out.println("Aprovado pelo gerente."); | ||
return super.handle(request); | ||
} else { | ||
return "Pedido rejeitado: não aprovado pelo gerente."; | ||
} | ||
} | ||
} |
6 changes: 6 additions & 0 deletions
6
docs/PadroesDeProjeto/src/ChainsOfResponsibility/Handler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
package ChainsOfResponsibility; | ||
|
||
public interface Handler { | ||
Handler setNext(Handler handler); | ||
String handle(Request request); | ||
} |
Oops, something went wrong.