...
Índice
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.
Para começarmos a trabalhar temos que criar um projeto com suporte a .NET Core.
...
Com o projeto criado vamos adicionar os seguintes pacotes via nuget: Tnf, nuget Tnf.Dto disponível em nosso package source: App disponível em 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 referências entre eles não sendo necessário instalainstalá-las em cada assembly.
...
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
[DependsOn( typeof(TnfAutoMapperModule), typeof(DomainModule), typeof(CarolModule), typeof(EntityFrameworkModule))] public class AppModule : TnfModule { public override void PreInitialize() { base.PreInitialize(); //Configurando Log4Net logging IocManager.IocContainer.AddFacility<LoggingFacility>( f => f.UseTnfLog4Net().WithConfig("log4net.config") ); } public override void Initialize() { IocManager.RegisterAssemblyByConvention(typeof(AppModule).GetAssembly()Assembly); } } |
Como mencionado anteriormente no tópico de introdução a a camada de aplicação, esse essa camada tem a responsabilidade de ligar nosso assembly de negocio com nossa infraestrutura.
...
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:
...
No exemplo acima configuramos o nosso serviço de logger para ser o do Log4Net com o Castle para isso precisa adicionar o pacote de Tnf.App.Castle.Log4Net ao projeto de Application.
...
Todo serviço de aplicação deve implementar a interface IApplicationService.
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
public interface ITaskAppServiceIPersonAppService : IApplicationService { voidPersonDto CreateTaskCreatePerson(CreateTaskInputPersonDto inputperson); } |
Agora vamos implementar o contrato de nosso serviço definido acima. Toda implementação de serviços de aplicação devem derivar da classe ApplicationServiceAo fazer a implementação devemos derivar da classe AppApplicationService.
Essa classe expõe funcionalidades pré-definidas pelo TNF que facilitam o uso de logging e localization por exemplo.
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
public class TaskAppServicePersonAppService : ApplicationServiceAppApplicationService, ITaskAppServiceIPersonAppService { private readonly IPersonService _service; public TaskAppService(IPersonService service) { LocalizationSourceName_service = "SimpleTaskSystem"service; } public voidPersonDto CreateTaskCreatePerson(CreateTaskInputPersonDto inputperson) { ValidateDto<PersonDto, int>(person); if (Notification.HasNotification()) return PersonDto.NullInstance; // Write some logs (Logger is defined in ApplicationServiceAppApplicationService class) Logger.Info("Creating a new taskperson with descriptionname: " + input.DescriptionName); // Get a localized text (L is a shortcut for LocalizationHelper.GetString(...), defined in ApplicationServiceAppApplicationService class) var text = L("SampleLocalizableTextKey"); //var TODO:personBuilder Add new task to database... = new PersonBuilder(Notification) .WithId(person.Id) .WithName(person.Name) .WithChildren(person.Children.Select(p => new PersonBuilder(Notification).WithId(p.Id).WithName(p.Name)).ToList()); person.Id = _service.InsertAndGetId(personBuilder); return person; } } |
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ênciamétodo Initialize para o suporte a injeção de dependência.
Em nossa implementação do "TaskAppService" estamos usando a infraestrutura de Logger usada para criação de logs e L que representa o acesso a estrutura de localização do framework.
Essas e outras funcionalidades estão disponíveis através da herança do AppApplicationService.