Serviços de aplicação são usados para expor a lógica de domínio para a camada de apresentação.
Essa camada tem como principal objetivo aplicar todas as regras definidas para uma entidade ou para um processo, mantendo o domínio do negocio isolado fazendo a ligação da lógica do negocio com sua infraestrutura de dados.
No TNF a interface de um serviço de aplicação deve implementar IApplicationService. Essa interface já será registrada automaticamente no container de injeção de dependência através das convenções:
public interface ITaskAppService : IApplicationService
{
void CreateTask(CreateTaskInput input);
}
Um serviço de aplicação deveria implementar a interface declarada acima. Toda implementação de um serviço de aplicação deve derivar da classe ApplicationService.
Essa classe expõe funcionalidades pré-definidas dentro da aplicação que facilitam seu uso como logging, localization:
public class TaskAppService : ApplicationService, ITaskAppService
{
public TaskAppService()
{
LocalizationSourceName = "SimpleTaskSystem";
}
public void CreateTask(CreateTaskInput input)
{
// Write some logs (Logger is defined in ApplicationService class)
Logger.Info("Creating a new task with description: " + input.Description);
// Get a localized text (L is a shortcut for LocalizationHelper.GetString(...), defined in ApplicationService class)
var text = L("SampleLocalizableTextKey");
// TODO: Add new task to database...
}
}