# Tutorial

## Get started with Ecotone

The best way to get started with **Ecotone** is to actually build something realistic.\
Therefore we will build a small back-end for Shopping System during this tutorial.\
The techniques we will learn in the tutorial are **fundamental to building any application using Ecotone**.

{% hint style="success" %}
Found something to improve in the docs?\
Create Pull Request in [Documentation repository](https://github.com/ecotoneframework/documentation).
{% endhint %}

## Lessons

The tutorial is divided into several lessons:

* [Lesson 1](https://docs.ecotone.tech/tutorial-php-ddd-cqrs-event-sourcing/php-messaging-architecture), we will learn **the fundamentals** of **Ecotone**: Endpoints, Messages, Channels, and Command Query Responsibility Segregation (**CQRS**)
* [Lesson 2](https://docs.ecotone.tech/tutorial-php-ddd-cqrs-event-sourcing/php-domain-driven-design), we will learn **Tactical Domain Driven Design (DDD)**: Aggregates, Repositories and also Event Handlers
* [Lesson 3](https://docs.ecotone.tech/tutorial-php-ddd-cqrs-event-sourcing/php-serialization-deserialization), we will learn **how to use Converters,** therefore how to handle serialization and deserialization
* [Lesson 4](https://docs.ecotone.tech/tutorial-php-ddd-cqrs-event-sourcing/php-metadata-method-invocation), we will learn about **Metadata and Method Invocation** - How we can execute Message Handlers in a way not available in any other PHP Framework
* [Lesson 5](https://docs.ecotone.tech/tutorial-php-ddd-cqrs-event-sourcing/php-interceptors-middlewares), we will learn about **Interceptors**, Ecotone's powerful Middlewares
* [Lesson 6](https://docs.ecotone.tech/tutorial-php-ddd-cqrs-event-sourcing/php-asynchronous-processing), we we will learn about **Asynchronous** Endpoints, so how to process our Messages asynchronously.

{% hint style="success" %}
You don’t have to complete all of the lessons at once to get the value out of this tutorial.\
**You will start benefit from the tutorial even if it’s one or two lessons.**
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.ecotone.tech/tutorial-php-ddd-cqrs-event-sourcing.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
