Skip to content

Repository files navigation

FluentGuard

Tiny guard library for fluent precondition assertion. Current it is implemented for use with .net standard / core. Maybe a support for TypeScript and Java may be added.

You can follow my assumptions on this topic on my blog post.

Feel free to fork !

Description

Offers a fluent way for making preconditions in a guard style. The idea is to have preconditions always in the same syntax and have less code.

Examples

NotNull Check

Preconditions.For(DomainObjectId,nameof(DomainObjectId)).NotNull();

Using lambdas instead of hardcoded name

Preconditions.For(()=>DomainObjectId).NotNull();

Multiple checks

Preconditions.For(DomainObjectId,nameof(DomainObjectId)).NotNull().MinLength(3);

Validate annotations

In .net you can annotate your dtos with attributes from System.ComponentModel.DataAnnotations

These classes can look like this:

publicclassMyValueObject{[Required][MinLength(2)]publicstringText{get;set;}[Range(1,20)]publicintValue{get;set;}}

FluentGuard offers the ability to validate that all defined conditions are met

Preconditions.For(()=>myDto).ValidateModel();

Custom Messages

You can also pass a custom message which will be used for the exceprion message.

Preconditions.For(DomainObjectId,nameof(DomainObjectId)).NotNull(message:"DomainObject has to be not null");

How to extend

When you want to add a new validation rule without extending this repository you can just create ExtensionMethods for the given Validation rule. See for example the StringValidationExtensions

publicstaticValidationRule<string>MinLength(thisValidationRule<string>rule,intlength){if(string.IsNullOrWhiteSpace(rule.Value)||rule.Value.Length<length){thrownewArgumentOutOfRangeException(rule.Name,rule.Value.Length,$"The value should be at least {length} characters long!");}returnrule;}

Next Steps

  • Implement TypeScript

#Nuget Package https://www.nuget.org/packages/FluentGuard

About

Tiny library for fluent guard and assert expressions to formalize preconditions of methods

Topics

Resources

Stars

15 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages