Code Monkey home page Code Monkey logo

fluentguard's Introduction

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

fluentguard's People

Contributors

boase avatar cypressious avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

fluentguard's Issues

The message for NotDefault() is confusing

When the .NotDefault() Precondition fails, the exception message is:

System.ArgumentException : Bookedtime
"Parameter name: Value must have default value!"

Why would we say that it must have a 'default value' when the condition is that it is NOT the default value?

I think something like:
"Parameter name: Must have a value other than the system default"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.