Skip to content

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

License

Notifications You must be signed in to change notification settings

BoasE/FluentGuard

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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:

public class MyValueObject
{
    [Required]
    [MinLength(2)]
    public string Text { get; set; }

    [Range(1,20)]
    public int Value { 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

        public static ValidationRule<string> MinLength(this ValidationRule<string> rule, int length)
        {
            if (string.IsNullOrWhiteSpace(rule.Value) || rule.Value.Length < length)
            {
                throw new ArgumentOutOfRangeException(rule.Name, rule.Value.Length, $"The value should be at least {length} characters long!");
            }
            return rule;
        }

Next Steps

  • Implement TypeScript

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