29
loading...
This website collects cookies to deliver better user experience
public class CreateTaskUseCase : ICreateTaskUseCase
{
private readonly IMyTaskDataAccess _dao;
...
public MyTask CreateTask(string title, string description, DateTime dueDate)
{
var task = MyTask.Create(title, description, dueDate);
_dao.Insert(task);
return task;
}
}
...
public class CreateTaskController : ControllerBase
{
private readonly ICreateTaskUseCase _useCase;
public CreateTaskController(ICreateTaskUseCase useCase) =>
_useCase = useCase;
[HttpPost]
public IActionResult Create[FromBody] CreateTaskRequest request)
{
try
{
var task = _useCase.CreateTask(request.Title, request.Description, request.DueDate);
return Ok(task);
}
catch(CreateTaskException exc)
{
return BadRequest(exc.Message);
}
catch
{
return InternalServerError();
}
}
}
IMyTaskDataAccess
usada pelo CreateTaskUseCase
para inserir no banco de dados uma tarefa recém-criada. Esta interface é definida na aplicação (domínio) e implementada por quem a utiliza – em nosso caso de exemplo a API Web, sendo esta implementação um adaptador.public class CreateTaskUseCaseTest
{
[Fact]
public void CreateTaskSuccessfully()
{
//Arrange
var dao = new InMemoryMyTaskDatabase(); //Implementa IMyTaskDataAccess
var sut = new CreateTaskUseCase(dao);
//Act
var task = sut.CreateTask("title", "description", DateTime.Today.AddDays(1));
//Assert
Assert.Equal("title", task.Title);
Assert.Equal("description", task.Description);
Assert.Equal(DateTime.Today.AddDays(1), task.DueDate);
}
}
Referências
Alistair Cockburn - Hexagonal Architecture