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:
[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:
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:
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:
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