Como agregar un caso de uso
Esta guia explica como agregar un nuevo caso de uso a un proyecto generado con el arquetipo.
Estructura
Un caso de uso se compone de:
-
Una interfaz con sufijo
UseCaseen el paqueteusecase/que define el contrato. -
Un Command (opcional) que transporta los datos de entrada.
-
Un servicio en el paquete
service/que implementa la interfaz.
1. Definir la interfaz del caso de uso
Crea una interfaz en el paquete usecase/ del bounded context correspondiente:
public interface CreateTaskUseCase {
String create(CreateTaskCommand command);
}
Usa un verbo que coincida con la operacion: create, update, remove, find, publish. Evita nombres genericos como execute, perform o handle.
Cuando usar un Command vs parametros directos
// Command
CreateTaskUseCase.create(CreateTaskCommand command)
// Parametros directos
RemoveCartItemUseCase.removeItem(String cartId, String itemId)
// Parametro simple
CancelTaskUseCase.cancel(String taskId)
Para entender el criterio de decision, ver Command, parametros directos, o ambos en el tutorial.
2. Crear el Command (si aplica)
El Command es un DTO sin comportamiento que vive en el mismo paquete usecase/:
@Data
public class CreateTaskCommand {
private String title;
private IssueType type;
}
3. Implementar el servicio
Crea una clase package-private en el paquete service/ que implemente la interfaz:
@Service
@RequiredArgsConstructor
class TaskService implements CreateTaskUseCase {
private final TaskPersistencePort persistencePort;
@Override
public String create(CreateTaskCommand command) {
Task task = Task.create(command.getTitle(), command.getType());
persistencePort.save(task);
return task.getId();
}
}
-
La clase es package-private — no lleva
public. Spring la descubre igualmente con@Service. -
Depende de output ports (interfaces), nunca de adaptadores directamente.