Skip to content

Commit

Permalink
GitBook: [#90] Adding Get Started Page
Browse files Browse the repository at this point in the history
  • Loading branch information
ethno2405 authored and gitbook-bot committed Aug 2, 2022
1 parent 9fdc225 commit 30a244f
Show file tree
Hide file tree
Showing 36 changed files with 612 additions and 113 deletions.
Binary file added docs/.gitbook/assets/CronusStarting.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/LetTheGameBeginJigsawGIF.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/SoExcited~GIF.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 16 additions & 0 deletions docs/.gitbook/assets/file.drawing.svg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/image (1).png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/image (10).png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/image (11).png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/image (12).png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/image (13).png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/image (2).png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/image (3).png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/image (4).png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/image (5).png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/image (6).png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/image (7).png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/image (8).png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/image (9).png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/.gitbook/assets/image.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ description: >-

Cronus is an open-source framework that helps you to solve business problems with less time spent on infrastructure concerns. Applications built with Cronus are centered around three core concepts:

* [Quick Start](getting-started/quick-start/)
* [Domain-Driven Design](cronus-framework/concepts/ddd.md)
* [Event Sourcing](cronus-framework/concepts/es.md)
* [Command Query Responsibility Segregation](cronus-framework/concepts/cqrs.md)
Expand Down
8 changes: 7 additions & 1 deletion docs/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

* [Introduction](README.md)

## Getting Started

* [Quick Start](getting-started/quick-start/README.md)
* [Setup](getting-started/quick-start/setup.md)
* [Persist First Event](getting-started/quick-start/persist-first-event.md)
* [Explore Projections](getting-started/quick-start/explore-projections.md)

## Cronus Framework

* [Concepts](cronus-framework/concepts/README.md)
Expand Down Expand Up @@ -40,4 +47,3 @@
* [Serialization](cronus-framework/messaging/serialization.md)
* [Configuration](cronus-framework/configuration.md)
* [Unit testing](cronus-framework/unit-testing.md)

25 changes: 13 additions & 12 deletions docs/cronus-framework/concepts/ddd.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,19 @@ With Domain-Driven Design the focus is on the core complexity of the domain!
Write software that models business processes explicitly!
{% endhint %}

## Why we need Domain Driven Design?
## Why do we need Domain-Driven Design?

Domain Driven Design is a concept which helps to reduce the overall complexity of a domain. Software solutions built using the Domain Driven Design approach, tend to reflect the reality closer and enable the business to grow and expand faster in a reliable and predictable way.
Domain-Driven Design is a concept that helps to reduce the overall complexity of a domain. Software solutions built using the Domain-Driven Design approach, tend to reflect the reality closer and enable the business to grow and expand faster in a reliable and predictable way.

{% hint style="success" %}
With Domain Driven Design you are delivering business value, not just an ordinary software.
With Domain-Driven Design you are delivering business value, not just an ordinary software.
{% endhint %}

## When to use Domain Driven Design?
## When to use Domain-Driven Design?

There are different opinions about the situations a DDD is appropriate and when you should use it.

There are several factors which make Domain Driven Design shine. If you have everything in place you should expect good, if not great, results:
There are several factors that make Domain-Driven Design shine. If you have everything in place you should expect good, if not great, results:

{% hint style="success" %}
* you are building software for an established and already operating business
Expand All @@ -40,22 +40,23 @@ There are several factors which make Domain Driven Design shine. If you have eve

It is recommended to use other techniques, different from Domain Driven Design if:

* you are building a software solution for a totally new business. The argument behind this is that Domain Driven Design relies on the experience and the know-how of the _domain experts_. It is very likely that you will invest a great amount of time designing models which are not useful. This for sure will lead you to a failure.
* you are building a software solution for a totally new business. The argument behind this is that Domain-Driven Design relies on the experience and the know-how of the _domain experts_. It is very likely that you will invest a great amount of time designing models which are not useful. This for sure will lead you to a failure.
* you are building a concept/MVP solution for a new feature. It is better to do it the "quick-and-dirty" way so you could discover if the business concept will be successful or not. This will give you a deeper understanding of the problems you are trying to solve.

{% hint style="danger" %}
* you are building a software solution for a totally new business
* you are building a concept/MVP solution
{% endhint %}

## How to apply Domain Driven Design?
## How to apply Domain-Driven Design?

* Find a domain expert!
* Strategic design
* Tactical design
* Fail fast
* Anticipate the steep learning curve

Find a domain expert!

Strategic design

Tactical design

Fail fast

Anticipate the steep learning curve
99 changes: 49 additions & 50 deletions docs/cronus-framework/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ By default, Cronus and its sub-components have good default settings. However, n

## Cronus

| Name | Type | Required | Default Value |
| :--- | :--- | :--- | :--- |
| [Cronus:BoundedContext](configuration.md#cronus-boundedcontext) | string | yes | |
| [Cronus:Tenants](configuration.md#cronus-tenants-greater-than-greater-than-string-or-required-yes) | string\[\] | yes | |
| [Cronus:ApplicationServicesEnabled](configuration.md#cronus-applicationservicesenabled) | bool | no | true |
| [Cronus:ProjectionsEnabled](configuration.md#cronus-projectionsenabled) | bool | no | true |
| [Cronus:PortsEnabled](configuration.md#cronus-portsenabled) | bool | no | true |
| [Cronus:SagasEnabled](configuration.md#cronus-sagasenabled) | bool | no | true |
| [Cronus:GatewaysEnabled](configuration.md#cronus-gatewaysenabled) | bool | no | true |
| Name | Type | Required | Default Value |
| -------------------------------------------------------------------------------------------------- | --------- | -------- | ------------- |
| [Cronus:BoundedContext](configuration.md#cronus-boundedcontext) | string | yes | |
| [Cronus:Tenants](configuration.md#cronus-tenants-greater-than-greater-than-string-or-required-yes) | string\[] | yes | |
| [Cronus:ApplicationServicesEnabled](configuration.md#cronus-applicationservicesenabled) | bool | no | true |
| [Cronus:ProjectionsEnabled](configuration.md#cronus-projectionsenabled) | bool | no | true |
| [Cronus:PortsEnabled](configuration.md#cronus-portsenabled) | bool | no | true |
| [Cronus:SagasEnabled](configuration.md#cronus-sagasenabled) | bool | no | true |
| [Cronus:GatewaysEnabled](configuration.md#cronus-gatewaysenabled) | bool | no | true |

#### Cronus:BoundedContext

Expand Down Expand Up @@ -65,10 +65,10 @@ Specifies whether to start a consumer for the Gateways

## Cronus.Api

| Name | Type | Required | Default Value |
| :--- | :--- | :--- | :--- |
| [Cronus:Api:Kestrel](configuration.md#hosting) | configurationSection | no | |
| [Cronus:Api:JwtAuthentication](configuration.md#authentication) | configurationSection | no | |
| Name | Type | Required | Default Value |
| --------------------------------------------------------------- | -------------------- | -------- | ------------- |
| [Cronus:Api:Kestrel](configuration.md#hosting) | configurationSection | no | |
| [Cronus:Api:JwtAuthentication](configuration.md#authentication) | configurationSection | no | |

### Hosting

Expand All @@ -80,7 +80,7 @@ A configuration could be provided by [KestrelOptions](https://docs.microsoft.com

#### Cronus:Api:Kestrel

```text
```
{
"Cronus": {
"Api": {
Expand All @@ -106,11 +106,11 @@ A configuration could be provided by [KestrelOptions](https://docs.microsoft.com

The API could be protected using a JWT bearer authentication.

The configuration is provided by [JwtBearerOptions](https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.builder.jwtbeareroptions?view=aspnetcore-1.1&viewFallbackFrom=aspnetcore-2.2). You can supply them directly in the DI or through a configuration file.
The configuration is provided by [JwtBearerOptions](https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.builder.jwtbeareroptions?view=aspnetcore-1.1\&viewFallbackFrom=aspnetcore-2.2). You can supply them directly in the DI or through a configuration file.

#### Cronus:Api:JwtAuthentication

```text
```
{
"Cronus": {
"Api": {
Expand All @@ -127,12 +127,12 @@ Remarks: [https://stackoverflow.com/a/58736850/224667](https://stackoverflow.com

## Cronus.Persistence.Cassandra

| Name | Type | Required | Default Value |
| :--- | :--- | :--- | :--- |
| [Cronus:Persistence:Cassandra:ConnectionString](configuration.md#cronus-persistence-cassandra-connectionstring) | string | yes | |
| [Cronus:Persistence:Cassandra:ReplicationStrategy](configuration.md#cronus-persistence-cassandra-replicationstrategy) | string | no | simple |
| [Cronus:Persistence:Cassandra:ReplicationFactor](configuration.md#cronus-persistence-cassandra-replicationstrategy) | int | no | 1 |
| [Cronus:Persistence:Cassandra:Datacenters](configuration.md#cronus-persistence-cassandra-replicationstrategy) | string\[\] | no | |
| Name | Type | Required | Default Value |
| --------------------------------------------------------------------------------------------------------------------- | --------- | -------- | ------------- |
| [Cronus:Persistence:Cassandra:ConnectionString](configuration.md#cronus-persistence-cassandra-connectionstring) | string | yes | |
| [Cronus:Persistence:Cassandra:ReplicationStrategy](configuration.md#cronus-persistence-cassandra-replicationstrategy) | string | no | simple |
| [Cronus:Persistence:Cassandra:ReplicationFactor](configuration.md#cronus-persistence-cassandra-replicationstrategy) | int | no | 1 |
| [Cronus:Persistence:Cassandra:Datacenters](configuration.md#cronus-persistence-cassandra-replicationstrategy) | string\[] | no | |

#### Cronus:Persistence:Cassandra:ConnectionString

Expand All @@ -149,14 +149,14 @@ Valid values:

## Cronus.Projections.Cassandra

| Name | Type | Required | Default Value |
| :--- | :--- | :--- | :--- |
| [Cronus:Projections:Cassandra:ConnectionString](configuration.md#cronus-projections-cassandra-connectionstring) | string | yes | |
| [Cronus:Pojections:Cassandra:ReplicationStrategy](configuration.md#cronus-projections-cassandra-replicationstrategy) | string | no | simple |
| [Cronus:Pojections:Cassandra:ReplicationFactor](configuration.md#cronus-projections-cassandra-replicationfactor) | int | no | 1 |
| [Cronus:Pojections:Cassandra:Datacenters](configuration.md#cronus-projections-cassandra-datacenters) | string\[\] | no | |
| [Cronus:Pojections:Cassandra:TableRetention:DeleteOldProjectionTables](configuration.md#cronus-projections-cassandra-tableretention-deleteoldprojectiontables) | boolean | no | true |
| [Cronus:Projections:Cassandra:TableRetention:NumberOfOldProjectionTablesToRetain](configuration.md#cronus-projections-cassandra-tableretention-numberofoldprojectiontablestoretain) | uint | no | 2 |
| Name | Type | Required | Default Value |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | -------- | ------------- |
| [Cronus:Projections:Cassandra:ConnectionString](configuration.md#cronus-projections-cassandra-connectionstring) | string | yes | |
| [Cronus:Pojections:Cassandra:ReplicationStrategy](configuration.md#cronus-projections-cassandra-replicationstrategy) | string | no | simple |
| [Cronus:Pojections:Cassandra:ReplicationFactor](configuration.md#cronus-projections-cassandra-replicationfactor) | int | no | 1 |
| [Cronus:Pojections:Cassandra:Datacenters](configuration.md#cronus-projections-cassandra-datacenters) | string\[] | no | |
| [Cronus:Pojections:Cassandra:TableRetention:DeleteOldProjectionTables](configuration.md#cronus-projections-cassandra-tableretention-deleteoldprojectiontables) | boolean | no | true |
| [Cronus:Projections:Cassandra:TableRetention:NumberOfOldProjectionTablesToRetain](configuration.md#cronus-projections-cassandra-tableretention-numberofoldprojectiontablestoretain) | uint | no | 2 |

#### `Cronus:Projections:Cassandra:ConnectionString`

Expand All @@ -175,63 +175,62 @@ Valid values:

#### `Cronus:Projections:Cassandra:Datacenters`

#### `Cronus:Projections:Cassandra:TableRetention:DeleteOldProjectionTables`
#### `Cronus:Projections:Cassandra:TableRetention:DeleteOldProjectionTables` 

Enables deletion of old projection tables

#### `Cronus:Projections:Cassandra:TableRetention:NumberOfOldProjectionTablesToRetain`
#### `Cronus:Projections:Cassandra:TableRetention:NumberOfOldProjectionTablesToRetain` 

Configures Cassandra number of old projection tables -> default: live table and 2 old tables
Configures Cassandra number of old projection tables -> default: live table and 2 old tables

## Cronus.Transport.RabbitMq

#### `Cronus:Transport:RabbiMQ:ConsumerWorkersCount` >> _integer \| Required: Yes \| Default: 5_
#### `Cronus:Transport:RabbiMQ:ConsumerWorkersCount` >> _integer | Required: Yes | Default: 5_

Configures the number of threads which will be dedicated for consuming messages from RabbitMQ for _every_ consumer.
Configures the number of threads which will be dedicated to consuming messages from RabbitMQ for _every_ consumer.

#### `Cronus:Transport:RabbiMQ:Server` >> _string \| Required: Yes \| Default: 127.0.0.1_
#### `Cronus:Transport:RabbiMQ:Server` >> _string | Required: Yes | Default: 127.0.0.1_

DNS or IP to the RabbitMQ server

#### `Cronus:Transport:RabbiMQ:Port` >> _integer \| Required: Yes \| Default: 5672_
#### `Cronus:Transport:RabbiMQ:Port` >> _integer | Required: Yes | Default: 5672_

The port number on which the RabbitMQ server is running

#### `Cronus:Transport:RabbiMQ:VHost` >> _string \| Required: Yes \| Default: /_
#### `Cronus:Transport:RabbiMQ:VHost` >> _string | Required: Yes | Default: /_

The name of the virtual host. It is a good practice to not use the default `/` vhost. For more details see the [official docs](https://www.rabbitmq.com/vhosts.html). Cronus is not using this for managing multitenancy.

#### `Cronus:Transport:RabbiMQ:Username` >> _string \| Required: Yes \| Default: guest_
#### `Cronus:Transport:RabbiMQ:Username` >> _string | Required: Yes | Default: guest_

The RabbitMQ username

#### `Cronus:Transport:RabbiMQ:Password` >> _string \| Required: Yes \| Default: guest_
#### `Cronus:Transport:RabbiMQ:Password` >> _string | Required: Yes | Default: guest_

The RabbitMQ password

#### `Cronus:Transport:RabbiMQ:AdminPort` >> _integer \| Required: Yes \| Default: 5672_
#### `Cronus:Transport:RabbiMQ:AdminPort` >> _integer | Required: Yes | Default: 5672_

RabbitMQ admin port used to create, delete rabbitmq resources

## Cronus.AtomicAction.Redis

An implementation of `Cronus.AtomicAction` using distributed locks with Redis

\(_Source:_ [https://redis.io/topics/distlock](https://redis.io/topics/distlock)\)
(_Source:_ [https://redis.io/topics/distlock](https://redis.io/topics/distlock))

#### `Cronus:AtomicAction:Redis:ConnectionString` >> _string \| Required: Yes_
#### `Cronus:AtomicAction:Redis:ConnectionString` >> _string | Required: Yes_

Configures the connection string where Redis is located

#### `Cronus:AtomicAction:Redis:LockTtl` >> _TimeSpan \| Required: No \| Default: 00:00:01.000_

#### `Cronus:AtomicAction:Redis:ShorTtl` >> _TimeSpan \| Required: No \| Default: 00:00:01.000_
#### `Cronus:AtomicAction:Redis:LockTtl` >> _TimeSpan | Required: No | Default: 00:00:01.000_

#### `Cronus:AtomicAction:Redis:LongTtl` >> _TimeSpan \| Required: No \| Default: 00:00:05.000_
#### `Cronus:AtomicAction:Redis:ShorTtl` >> _TimeSpan | Required: No | Default: 00:00:01.000_

#### `Cronus:AtomicAction:Redis:LockRetryCount` >> _int \| Required: No \| Default: 3_
#### `Cronus:AtomicAction:Redis:LongTtl` >> _TimeSpan | Required: No | Default: 00:00:05.000_

#### `Cronus:AtomicAction:Redis:LockRetryDelay` >> _TimeSpan \| Required: No \| Default: 00:00:00.100_
#### `Cronus:AtomicAction:Redis:LockRetryCount` >> _int | Required: No | Default: 3_

#### `Cronus:AtomicAction:Redis:ClockDriveFactor` >> _double \| Required: No \| Default: 0.01_
#### `Cronus:AtomicAction:Redis:LockRetryDelay` >> _TimeSpan | Required: No | Default: 00:00:00.100_

#### `Cronus:AtomicAction:Redis:ClockDriveFactor` >> _double | Required: No | Default: 0.01_

0 comments on commit 30a244f

Please sign in to comment.