2023-11-04 16:45:41 -04:00
> This project was originally initiated by [Powered Software Inc.](https://poweredsoft.com/) and was forked from the [PoweredSoft.CQRS](https://github.com/PoweredSoft/CQRS) Repository
2023-11-04 16:08:39 -04:00
2021-02-02 12:34:18 -05:00
# CQRS
2023-11-04 16:08:39 -04:00
Our implementation of query and command responsibility segregation (CQRS).
2021-02-02 12:34:18 -05:00
## Getting Started
> Install nuget package to your awesome project.
2023-11-04 16:45:41 -04:00
| Full Version | NuGet | NuGet Install |
|-----------------------------------------| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |-----------------------------------------------------------------------:|
| OpenHarbor.CQRS | < a href = "https://www.nuget.org/packages/OpenHarbor.CQRS/" target = "_blank" > [![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.svg?style=flat-square& label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS/)< / a > | ```PM> Install-Package OpenHarbor.CQRS ``` |
| OpenHarbor.CQRS.AspNetCore | < a href = "https://www.nuget.org/packages/OpenHarbor.CQRS.AspNetCore/" target = "_blank" > [![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.AspNetCore.svg?style=flat-square& label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.AspNetCore/)< / a > | ```PM> Install-Package OpenHarbor.CQRS.AspNetCore ``` |
| OpenHarbor.CQRS.FluentValidation | < a href = "https://www.nuget.org/packages/OpenHarbor.CQRS.FluentValidation/" target = "_blank" > [![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.FluentValidation.svg?style=flat-square& label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.FluentValidation/)< / a > | ```PM> Install-Package OpenHarbor.CQRS.FluentValidation ``` |
| OpenHarbor.CQRS.DynamicQuery | < a href = "https://www.nuget.org/packages/OpenHarbor.CQRS.DynamicQuery/" target = "_blank" > [![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.DynamicQuery.svg?style=flat-square& label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.DynamicQuery/)< / a > | ```PM> Install-Package OpenHarbor.CQRS.DynamicQuery ``` |
| OpenHarbor.CQRS.DynamicQuery.AspNetCore | < a href = "https://www.nuget.org/packages/OpenHarbor.CQRS.DynamicQuery.AspNetCore/" target = "_blank" > [![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.DynamicQuery.AspNetCore.svg?style=flat-square& label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.DynamicQuery.AspNetCore/)< / a > | ```PM> Install-Package OpenHarbor.CQRS.DynamicQuery.AspNetCore ``` |
> Abstractions Packages.
2021-02-02 12:34:18 -05:00
| Full Version | NuGet | NuGet Install |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -----------------------------------------------------: |
2023-11-04 16:45:41 -04:00
| OpenHarbor.CQRS.Abstractions | < a href = "https://www.nuget.org/packages/OpenHarbor.CQRS.Abstractions/" target = "_blank" > [![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.Abstractions.svg?style=flat-square& label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.Abstractions/)< / a > | ```PM> Install-Package OpenHarbor.CQRS.Abstractions ``` |
| OpenHarbor.CQRS.AspNetCore.Abstractions | < a href = "https://www.nuget.org/packages/OpenHarbor.CQRS.AspNetCore.Abstractions/" target = "_blank" > [![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.AspNetCore.Abstractions.svg?style=flat-square& label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.AspNetCore.Abstractions/)< / a > | ```PM> Install-Package OpenHarbor.CQRS.AspNetCore.Abstractions ``` |
| OpenHarbor.CQRS.DynamicQuery.Abstractions | < a href = "https://www.nuget.org/packages/OpenHarbor.CQRS.DynamicQuery.Abstractions/" target = "_blank" > [![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.DynamicQuery.Abstractions.svg?style=flat-square& label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.DynamicQuery.Abstractions/)< / a > | ```PM> Install-Package OpenHarbor.CQRS.AspNetCore.Abstractions ``` |
2021-02-02 12:41:38 -05:00
## Sample of startup code for aspnetcore MVC
```csharp
public void ConfigureServices(IServiceCollection services)
{
// make sure to add your queries and commands before the .AddPoweredSoftQueries and .AddPoweredSoftCommands
AddQueries(services);
AddCommands(services);
// adds the non related to aspnet core features.
2023-11-04 16:45:41 -04:00
services.AddOpenHarborCQRS();
2021-02-02 12:41:38 -05:00
services
.AddControllers()
2023-11-04 16:45:41 -04:00
.AddOpenHarborQueries() // adds queries to aspnetcore mvc.(you can make it configurable to load balance only commands on a instance)
.AddOpenHarborCommands() // adds commands to aspnetcore mvc. (you can make it configurable to load balance only commands on a instance)
2021-02-02 12:41:38 -05:00
.AddFluentValidation();
services.AddSwaggerGen();
}
```
2021-02-02 12:42:44 -05:00
> Example how to add your queries and commands.
```csharp
private void AddCommands(IServiceCollection services)
{
services.AddCommand< CreatePersonCommand , CreatePersonCommandHandler > ();
services.AddTransient< IValidator < CreatePersonCommand > , CreatePersonCommandValidator>();
services.AddCommand< EchoCommand , string , EchoCommandHandler > ();
services.AddTransient< IValidator < EchoCommand > , EchoCommandValidator>();
}
private void AddQueries(IServiceCollection services)
{
services.AddQuery< PersonQuery , IQueryable < Person > , PersonQueryHandler>();
}
```
2021-08-11 17:14:26 -04:00
# Fluent Validation
2021-02-02 12:41:38 -05:00
2021-08-11 17:14:26 -04:00
We use fluent validation in all of our projects, but we don't want it to be enforced.
If you install. ```PoweredSoft.CQRS.FluentValidation``` you can use this way of registrating your commands.
2021-08-11 17:15:34 -04:00
```csharp
2021-08-11 17:15:16 -04:00
public void ConfigureServices(IServiceCollection services)
{
// without Package.
services.AddCommand< EchoCommand , string , EchoCommandHandler > ();
services.AddTransient< IValidator < EchoCommand > , EchoCommandValidator>();
}
2021-08-11 17:14:26 -04:00
2021-08-11 17:15:16 -04:00
public void ConfigureServices(IServiceCollection services)
{
// with PoweredSoft.CQRS.FluentValidation package.
services.AddCommandWithValidator< EchoCommand , string , EchoCommandHandler , EchoCommandValidator > ();
}
2021-08-11 17:14:26 -04:00
```