Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/flosse/clean-architecture-with-rust

Full-Stack Clean Architecture implementation example written in Rust
https://github.com/flosse/clean-architecture-with-rust

architecture clean-architecture full-stack rust

Last synced: 12 days ago
JSON representation

Full-Stack Clean Architecture implementation example written in Rust

Awesome Lists containing this project

README

        

# Full-Stack Clean Architecture with Rust

This repository contains an example implementation of a
[Clean Architecture](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html)
written in [Rust](https://rust-lang.org).

## Circles

Each circle (a.k.a layer) is organized in a separate crate.
Currently there are these circles:

- `domain`
- `application`
- `adapter`
- `json-boundary`
- `infrastructure`
- `cli`
- `db`
- `desktop-egui`
- `web`
- `web-app`
- `web-app-api`
- `web-app-kern`
- `web-app-seed`
- `web-server-warp`

Depending on your system the amount and the name of circles could
be different but the main **dependency rule** must be ensured:

> Source code dependencies can only point inwards.

that means

> Nothing in an inner circle can know anything at all about
> something in an outer circle

## Build & run

First install [just](https://just.systems/):

```
cargo install just
```

Then you can run

```
just run-web
```
or

```
just run-desktop
```

or

```
just run-cli
```

## Example Szenario

The main purpose of this example is to discuss the architecture,
not the application szenario itself.
Nevertheless, the code represents a real-world application
that helps self-employed people organize their lives.

### User Stories

> *As a* self-employed person,
> *I want to* be able to write down spontaneous thoughts,
> *so that* I can find them later again at a central point.

> *As a* self-employed person,
> *I want to* structure my thoughts,
> *so that* they're connected with my personal life topics.