Árvore de páginas

Você está vendo a versão antiga da página. Ver a versão atual.

Comparar com o atual Ver Histórico da Página

« Anterior Versão 9 Próxima »


Introdução

Neste tópico vamos criar um projeto para nossa camada de aplicação, definir um módulo, interface e implementação de nosso serviço de aplicação.

Criando o projeto

Para começarmos a trabalhar temos que criar um projeto com suporte a .NET Core.

Para isso através do Visual Studio vamos criar nosso projeto acessando: File -> New -> Project -> .NET Standard -> Class Library.

Com o projeto criado vamos adicionar os seguintes pacotes via nuget: Tnf, Tnf.Dto disponível em nosso package source: https://www.myget.org/F/tnf/api/v3/index.json

Caso você faça referencie outros projetos em sua camada de aplicação como: camada de domínio e de infraestrutura, note que os projetos do .NET Core compartilham referencias entre eles não sendo necessário instala-las em cada assembly.

Definindo um Módulo

Vamos agora criar nosso modulo adicionando referências para nossa camada de aplicação.

AppModule.cs
[DependsOn(
	typeof(TnfAutoMapperModule),
	typeof(DomainModule),
	typeof(CarolModule),
	typeof(EntityFrameworkModule))]
public class AppModule : TnfModule
{
	public override void PreInitialize()
	{
		base.PreInitialize();
	}
	public override void Initialize()
	{
		IocManager.RegisterAssemblyByConvention(typeof(AppModule).GetAssembly());
	}
}

Como mencionado anteriormente no tópico de introdução a camada de aplicação, esse camada tem a responsabilidade de ligar nosso assembly de negocio com nossa infraestrutura.

O atributo "DependsOn" informa as dependências de camada de aplicação.

O exemplo a seguir mostra um cenário onde temos como dependências: uma camada de domínio, duas de infraestrutura e uma de cross-cutting:

  • TnfAutoMapperModule: configura o suporte ao uso do AutoMapper;
  • DomainModule: modulo da camada de domínio;
  • CarolModule: modulo da camada de infraestrutura que utiliza Carol (SAS TOTVS);
  • EntityFrameworkModule: modulo da camada de infraestrutura que utiliza Entity Framework Core;

Criando um Serviço de Aplicação

Definindo sua interface

Todo serviço de aplicação deve implementar a interface IApplicationService.

Definição da interface do serviço de aplicação
public interface ITaskAppService : IApplicationService
{
    void CreateTask(CreateTaskInput input);
}

Criando o serviço

Agora vamos implementar o contrato de nosso serviço definido acima. Toda implementação de serviços de aplicação devem derivar da classe ApplicationService. 

Essa classe expõe funcionalidades pré-definidas pelo TNF que facilitam o uso de logging e localization por exemplo.

Implementação do serviço de aplicação
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...
    }
}

Note que nosso módulo registra as convenções no método Initialize. Nosso serviço de aplicação já será automaticamente configurado em nosso container de injeção de dependência.

  • Sem rótulos