Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

CrudAppService e AsyncCrudAppService Classes

Se você precisa criar um serviço de aplicação que terá uma operação de CRUD (acrônimo de Create, Read, Update e Delete) para uma entidade especifica, o TNF contém duas classes para agilizar esses processo: CrudAppService e AsyncCrudAppService.

Como essas classes são facilitadores, neste modelo não possui nenhuma implementação na camada de domínio. As validações são geradas em cima dos objetos que fazem o mapeamento com o banco de dados (Country) e DTOs (CountryDto).

A entidade abaixo realiza o mapeamento da tabela Countries para o Entity Framework Core:

Bloco de código
languagec#
firstline1
titleCountry.cs
linenumberstrue
[AutoMap(typeof(CountryDto))]
[Table("Countries")]
public class Country : Entity
{
    public const int MaxNameLength = 256;
    [Required]
    [MaxLength(MaxNameLength)]
    public string Name { get; set; }


    public Country()
    {
    }

    public Country(int id, string name)
    {
        Id = id;
        Name = name;
    }
}

Abaixo a definição do DTO usando uma validação customizada:

Bloco de código
languagec#
firstline1
titleCountryDto.cs
linenumberstrue
public class CountryDto : CustomValidate
{
    public string Name { get; set; }
    public override void AddValidationErrors(CustomValidationContext context)
    {
       if (string.IsNullOrWhiteSpace(Name))
       {
           context.Results.Add(new ValidationResult("Name is required"));
       }
   }
}

Definição da interface do serviço de aplicação:

Bloco de código
languagec#
firstline1
titleICountryAppService.cs
linenumberstrue
public interface ICountryAppService : IAsyncCrudAppService<CountryDto>
{
}

Implementação do serviço de aplicação informando qual a entidade, DTO e realizando a herança da classe AsyncCrudAppService que irá definir que este serviço contem as funcionalidades de CRUD presentes no TNF:

Bloco de código
languagec#
firstline1
titleCountryAppService.cs
linenumberstrue
public class CountryAppService : AsyncCrudAppService<Country, CountryDto>, ICountryAppService
{
    public CountryAppService(IRepository<Country> repository)
        : base(repository)
    {
    }
}

Note que o serviço recebe como parâmetro um repositório de dados para a entidade Country. Quem define a implementação para a interface IRepository neste exemplo é um nuget package do TNF que contém uma implementação de repositório para o Entity Framework Core chamado: "Tnf.App.EntityFrameworkCore".

O repositório padrão realiza o mapeamento da entidade automaticamente para o seu respectivo DTO através de outros pacotes chamados: Tnf.AutoMapper e Tnf.Dto.

Ambos os pacotes podem ser obtidos através de nosso feed de pacotes: https://www.myget.org/F/tnf/api/v3/index.json