From 2707990cb78336c8512b4534a63893e81ced72f1 Mon Sep 17 00:00:00 2001 From: Eduardo Lima Date: Sat, 27 Aug 2022 18:01:38 -0300 Subject: [PATCH 1/2] Add initial portuguese translation for Validation.md doc --- docs/pt-BR/Validation.md | 184 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 182 insertions(+), 2 deletions(-) diff --git a/docs/pt-BR/Validation.md b/docs/pt-BR/Validation.md index 5818566cdd..9b7f42b4e3 100644 --- a/docs/pt-BR/Validation.md +++ b/docs/pt-BR/Validation.md @@ -1,3 +1,183 @@ -## Validation +# Validação -Façam \ No newline at end of file +O sistema de validação é utilizado para validar a entrada do usuário o a requisição do cliente para uma ação da controller ou por um serviço. + +ABP é compatível com o sistema de Validação de Modelos do ASP.NET Core e tudo escrito na [sua documentação](https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation) já é válido para aplicações baseadas no ABP. Logo, esse documento foca nas funcionalidades do ABP ao invés de repetir a documentação da Microsoft. + +Em adição, o ABP adiciona os seguintes benefícios: + +* Define `IValidationEnabled` para adicionar validação automática para uma classe arbitrária. Já que todos [application services](Application-Services.md) herdados o implementam, eles também são validados automáticamente. +* Automáticamente traduz os erros de validação para os atributos do data annotation. +* Provê serviços extensívels para validar a chamado de um método ou o estado de um objeto. +* Provê integração com o [FluentValidation](https://fluentvalidation.net/) + +## Validando DTOs + +Essa seção introduz brevemente o sistema de validação. Para mais detalhes, veja a [Documentação da Validação de Modelo em ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation). + +### Atributos Data Nottation + +Utilizar data annotations é uma maneira simples de implementar uma validação formar para um [DTO](Data-Transfer-Objects.md) de uma forma declarativa. Exemplo: + +````csharp +public class CreateBookDto +{ + [Required] + [StringLength(100)] + public string Name { get; set; } + + [Required] + [StringLength(1000)] + public string Description { get; set; } + + [Range(0, 999.99)] + public decimal Price { get; set; } +} +```` +Quando você utilzar essa classe como parâmetro para um [application service](Application-Services.md) ou um controller, ele será automáticamente validado e a validação localizada será lançada ([e tratada](Exception-Handling.md) pelo ABP framework). + +### IValidatableObject + +`IValidatavleObject` pode ser implementado por um DTO para executar uma lógica customizada de validação. `CreateBookDto` no exemplo a seguir implementa essa interface e verifica se o `Name` é igual a `Description` e retorna um erro de validação nesse caso. + +````csharp +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; + +namespace Acme.BookStore +{ + public class CreateBookDto : IValidatableObject + { + [Required] + [StringLength(100)] + public string Name { get; set; } + + [Required] + [StringLength(1000)] + public string Description { get; set; } + + [Range(0, 999.99)] + public decimal Price { get; set; } + + public IEnumerable Validate( + ValidationContext validationContext) + { + if (Name == Description) + { + yield return new ValidationResult( + "Name and Description can not be the same!", + new[] { "Name", "Description" } + ); + } + } + } +} +```` + +#### Resolvendo um serviço. + +Se você precisa resolver um serviço do [sistema de injeção de dependências](Dependency-Injection.md), você pode utilizar o objeto `ValidationContext`. + +````csharp +var myService = validationContext.GetRequiredService(); +```` + +> Enquando resolver os serviços no método `Validate` permite qualquer possibilidade, não é um boa prática implementar sua lógica de validação do domínios no DTOs. Matenha os DTOs simples. Seu propósito é transferir dados (DTO: Data Transfer Object, ou Objeto de Transferência de Dados). + +## Infraestrutura de Validação. + +Essa seção explica alguns serviços adicionais providos pelo ABP Framework. + +### Interface IValidationEnabled + +`IValidationEnabled` é um marcado vazio de interface que pode ser implementado por qualquer classe (registrada e resolvida do [DI](Dependency-Injection.md)) e deixe o ABP framework realizar o sistema de validação para os métodos da classe. Por exemplo: + +````csharp +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Validation; + +namespace Acme.BookStore +{ + public class MyService : ITransientDependency, IValidationEnabled + { + public virtual async Task DoItAsync(MyInput input) + { + //... + } + } +} +```` + +> O ABP framework utiliza o sistema de [dynamic proxying / interception](Dynamic-Proxying-Interceptors.md) para realizar a validação. Para o fazer funcionar, seu métido deve ser **virtual** ou seu serivço deve ser injetado e utilizado através de uma **interface** (como `IMyService`). + +#### Habilitando e Desabilitando Validações + +Você pode utilizar o `[DisableValidation]` para desabilitar para métodos, classes e propriedades. + +````csharp +[DisableValidation] +public Void MyMethod() +{ +} + +[DisableValidation] +public class InputClass +{ + public string MyProperty { get; set; } +} + +public class InputClass +{ + [DisableValidation] + public string MyProperty { get; set; } +} +```` + +### AbpValidationException + +Uma vez que o ABP determina um erro de validação, é lançada uma validação do tipo `AbpValidationException`. O código da sua aplicação poderá lançar o `AbpValidationException`, mas na maioria das vezes não será necessário. + +* A propriedade `ValidationErrors` do `AbpValidationException` contem a lista com os erros de validação. +* O nível de log do `AbpValidationException` é definido como `Warning`. Todos são erros de validação são logados no [Sistema de Logging](Logging.md). +* `AbpValidationException` é tratado automáticamente pelo ABP framework e é convertido para um erro utilizável com o status code HTTP 400. Veja a documentação de [Manipulação de Exceção](Exception-Handling.md) para mais informações. + +## Tópicos Avançados + +### IObjectValidator + +Além da validação automática, você pode querer validar um objeto manualmente. Nesse caso, [injete](Dependency-Injection.md) e use o serviço `IObjectValidator`: + +* O método `ValidateAsync` valida o objeto informado baseado nas regras de validação e lança uma `AbpValidationException` se não estiver em um estado válido. + +* `GetErrorsAsync` não lança uma exceção, somente retorna os erros de validação. + +`IObjectValidator` é implementado pelo `ObjectValidator` por padrão. `ObjectValidator` é estensível; você pode implementar a interface `IObjectValidationContributor` para contribuir com uma lógica customizada. Exemplo: + +````csharp +public class MyObjectValidationContributor + : IObjectValidationContributor, ITransientDependency +{ + public Task AddErrorsAsync(ObjectValidationContext context) + { + //Get the validating object + var obj = context.ValidatingObject; + + //Add the validation errors if available + context.Errors.Add(...); + return Task.CompletedTask; + } +} +```` + +* Lembre-se de registrar sua classe no [DI](Dependency-Injection.md) (Implementando ) +* Remember to register your class to the [DI](Dependency-Injection.md) (implementar `ITransientDependency` é exatamente como nesse exemplo) +* ABP vai automáticamente descobrir sua classe e utilizá-la em qualquer tipo de validação de objetos (incluindo chamadas de métodos de validação atumáticas). + +### IMethodInvocationValidator + +`IMethodInvocationValidator` é utilizado para validar a chamada de um método. Ele utiliza internamente o `IObjectValidator` para validar os objetos passados para na chamada do método. Você normalmente não precisa desse serivço já que ele é utilizado automáticamente pelo framework, mas você pode querer reutilziar ou substituir na sua aplicação em alguns casos raros. + +## Integração com FluentValidation + +O pacote Volo.Abp.FluentValidation integra a biblioteca FluentValidation com o sistema de validaçõa (implementando o `IObjectValidationContributor`). Veja o [documento de Integração com o FluentValidation](FluentValidation.md) para mais informações. From 1290ce57d95912ea42494f926221a4870a7d426e Mon Sep 17 00:00:00 2001 From: Eduardo Lima Date: Sat, 27 Aug 2022 19:04:58 -0300 Subject: [PATCH 2/2] fix spelling issues on validation documentation (pt-BR) --- docs/pt-BR/Validation.md | 47 ++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/docs/pt-BR/Validation.md b/docs/pt-BR/Validation.md index 9b7f42b4e3..662235431a 100644 --- a/docs/pt-BR/Validation.md +++ b/docs/pt-BR/Validation.md @@ -1,23 +1,23 @@ # Validação -O sistema de validação é utilizado para validar a entrada do usuário o a requisição do cliente para uma ação da controller ou por um serviço. +O sistema de validação é utilizado para validar a entrada do usuário ou a requisição do cliente para uma ação de um controller ou por um serviço. -ABP é compatível com o sistema de Validação de Modelos do ASP.NET Core e tudo escrito na [sua documentação](https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation) já é válido para aplicações baseadas no ABP. Logo, esse documento foca nas funcionalidades do ABP ao invés de repetir a documentação da Microsoft. +O ABP é compatível com o sistema de Validação de Modelos do ASP.NET Core e tudo escrito na [sua documentação](https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation) é válido para aplicações baseadas no ABP. Logo, esse documento foca nas funcionalidades do ABP ao invés de repetir a documentação da Microsoft. -Em adição, o ABP adiciona os seguintes benefícios: +Além disso, o ABP adiciona os seguintes benefícios: -* Define `IValidationEnabled` para adicionar validação automática para uma classe arbitrária. Já que todos [application services](Application-Services.md) herdados o implementam, eles também são validados automáticamente. -* Automáticamente traduz os erros de validação para os atributos do data annotation. -* Provê serviços extensívels para validar a chamado de um método ou o estado de um objeto. +* Define `IValidationEnabled` para adicionar validação automática para uma classe qualquer. Como todos os [serviços de aplicação](Application-Services.md) já o implementam, eles também são validados automaticamente. +* Automaticamente traduz os erros de validação para os atributos de anotação de dados. +* Provê serviços extensíveis para validar a chamada de um método ou o estado de um objeto. * Provê integração com o [FluentValidation](https://fluentvalidation.net/) ## Validando DTOs Essa seção introduz brevemente o sistema de validação. Para mais detalhes, veja a [Documentação da Validação de Modelo em ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation). -### Atributos Data Nottation +### Atributos de anotação de dados -Utilizar data annotations é uma maneira simples de implementar uma validação formar para um [DTO](Data-Transfer-Objects.md) de uma forma declarativa. Exemplo: +Utilizar anotações de dados é uma maneira simples de implementar uma validação formal para um [DTO](Data-Transfer-Objects.md) de uma forma declarativa. Exemplo: ````csharp public class CreateBookDto @@ -34,11 +34,11 @@ public class CreateBookDto public decimal Price { get; set; } } ```` -Quando você utilzar essa classe como parâmetro para um [application service](Application-Services.md) ou um controller, ele será automáticamente validado e a validação localizada será lançada ([e tratada](Exception-Handling.md) pelo ABP framework). +Quando você utilizar essa classe como parâmetro para um [serviço da aplicação](Application-Services.md) ou um controller, ele será automaticamente validado e a validação traduzida será lançada ([e tratada](Exception-Handling.md) pelo ABP framework). ### IValidatableObject -`IValidatavleObject` pode ser implementado por um DTO para executar uma lógica customizada de validação. `CreateBookDto` no exemplo a seguir implementa essa interface e verifica se o `Name` é igual a `Description` e retorna um erro de validação nesse caso. +`IValidatableObject` pode ser implementado por um DTO para executar uma lógica customizada de validação. O `CreateBookDto` no exemplo a seguir implementa essa interface e verifica se o `Name` é igual a `Description` e retorna um erro de validação nesse caso. ````csharp using System.Collections.Generic; @@ -76,21 +76,21 @@ namespace Acme.BookStore #### Resolvendo um serviço. -Se você precisa resolver um serviço do [sistema de injeção de dependências](Dependency-Injection.md), você pode utilizar o objeto `ValidationContext`. +Se você precisar resolver um serviço do [sistema de injeção de dependências](Dependency-Injection.md), você pode utilizar o objeto `ValidationContext`. ````csharp var myService = validationContext.GetRequiredService(); ```` -> Enquando resolver os serviços no método `Validate` permite qualquer possibilidade, não é um boa prática implementar sua lógica de validação do domínios no DTOs. Matenha os DTOs simples. Seu propósito é transferir dados (DTO: Data Transfer Object, ou Objeto de Transferência de Dados). +> Enquanto resolver os serviços no método `Validate` permite várias possibilidades, não é um boa prática implementar sua lógica de validação do domínio nos DTOs. Mantenha os DTOs simples. Seu propósito é transferir dados (DTO: Data Transfer Object, ou Objeto de Transferência de Dados). ## Infraestrutura de Validação. -Essa seção explica alguns serviços adicionais providos pelo ABP Framework. +Essa seção explica alguns serviços adicionais fornecidos pelo ABP Framework. ### Interface IValidationEnabled -`IValidationEnabled` é um marcado vazio de interface que pode ser implementado por qualquer classe (registrada e resolvida do [DI](Dependency-Injection.md)) e deixe o ABP framework realizar o sistema de validação para os métodos da classe. Por exemplo: +`IValidationEnabled` é um marcador vazio de interface que pode ser implementado por qualquer classe (registrada e resolvida a partir do [DI](Dependency-Injection.md)) para permitir que o ABP framework realize o sistema de validação para os métodos da classe. Por exemplo: ````csharp using System.Threading.Tasks; @@ -109,11 +109,11 @@ namespace Acme.BookStore } ```` -> O ABP framework utiliza o sistema de [dynamic proxying / interception](Dynamic-Proxying-Interceptors.md) para realizar a validação. Para o fazer funcionar, seu métido deve ser **virtual** ou seu serivço deve ser injetado e utilizado através de uma **interface** (como `IMyService`). +> O ABP framework utiliza o sistema de [Proxying Dinâmico / Interceptadores](Dynamic-Proxying-Interceptors.md) para realizar a validação. Para fazê-lo funcionar, seu método deve ser **virtual** ou seu serviço deve ser injetado e utilizado através de uma **interface** (como `IMyService`). #### Habilitando e Desabilitando Validações -Você pode utilizar o `[DisableValidation]` para desabilitar para métodos, classes e propriedades. +Você pode utilizar o `[DisableValidation]` e desabilitar a validação para métodos, classes e propriedades. ````csharp [DisableValidation] @@ -139,8 +139,8 @@ public class InputClass Uma vez que o ABP determina um erro de validação, é lançada uma validação do tipo `AbpValidationException`. O código da sua aplicação poderá lançar o `AbpValidationException`, mas na maioria das vezes não será necessário. * A propriedade `ValidationErrors` do `AbpValidationException` contem a lista com os erros de validação. -* O nível de log do `AbpValidationException` é definido como `Warning`. Todos são erros de validação são logados no [Sistema de Logging](Logging.md). -* `AbpValidationException` é tratado automáticamente pelo ABP framework e é convertido para um erro utilizável com o status code HTTP 400. Veja a documentação de [Manipulação de Exceção](Exception-Handling.md) para mais informações. +* O nível de log do `AbpValidationException` é definido como `Warning`. Todos os erros de validação são logados no [Sistema de Logging](Logging.md). +* `AbpValidationException` é tratado automaticamente pelo ABP framework e é convertido em um erro utilizável com o código de status HTTP 400. Veja a documentação de [Manipulação de Exceção](Exception-Handling.md) para mais informações. ## Tópicos Avançados @@ -152,7 +152,7 @@ Além da validação automática, você pode querer validar um objeto manualment * `GetErrorsAsync` não lança uma exceção, somente retorna os erros de validação. -`IObjectValidator` é implementado pelo `ObjectValidator` por padrão. `ObjectValidator` é estensível; você pode implementar a interface `IObjectValidationContributor` para contribuir com uma lógica customizada. Exemplo: +`IObjectValidator` é implementado pelo `ObjectValidator` por padrão. `ObjectValidator` é extensível; você pode implementar a interface `IObjectValidationContributor` para contribuir com uma lógica customizada. Exemplo: ````csharp public class MyObjectValidationContributor @@ -170,14 +170,13 @@ public class MyObjectValidationContributor } ```` -* Lembre-se de registrar sua classe no [DI](Dependency-Injection.md) (Implementando ) -* Remember to register your class to the [DI](Dependency-Injection.md) (implementar `ITransientDependency` é exatamente como nesse exemplo) -* ABP vai automáticamente descobrir sua classe e utilizá-la em qualquer tipo de validação de objetos (incluindo chamadas de métodos de validação atumáticas). +* Lembre-se de registrar sua classe no [DI](Dependency-Injection.md) (implementar `ITransientDependency` faz isso no exemplo anterior) +* ABP vai automaticamente descobrir sua classe e utilizá-la em qualquer tipo de validação de objetos (incluindo chamadas de métodos de validação automáticas). ### IMethodInvocationValidator -`IMethodInvocationValidator` é utilizado para validar a chamada de um método. Ele utiliza internamente o `IObjectValidator` para validar os objetos passados para na chamada do método. Você normalmente não precisa desse serivço já que ele é utilizado automáticamente pelo framework, mas você pode querer reutilziar ou substituir na sua aplicação em alguns casos raros. +`IMethodInvocationValidator` é utilizado para validar a chamada de um método. Ele utiliza internamente o `IObjectValidator` para validar os objetos passados na chamada do método. Você normalmente não precisa deste serviço, já que ele é utilizado automaticamente pelo framework, mas você pode querer reutilizar ou substituir na sua aplicação em alguns casos raros. ## Integração com FluentValidation -O pacote Volo.Abp.FluentValidation integra a biblioteca FluentValidation com o sistema de validaçõa (implementando o `IObjectValidationContributor`). Veja o [documento de Integração com o FluentValidation](FluentValidation.md) para mais informações. +O pacote Volo.Abp.FluentValidation integra a biblioteca FluentValidation com o sistema de validação (implementando o `IObjectValidationContributor`). Veja o [documento de Integração com o FluentValidation](FluentValidation.md) para mais informações.