BoasE / FluentGuard

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

About

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

License:MIT License


Languages

Language:C# 98.0%Language:Batchfile 2.0%