## Gacela helps you build modular applications
**VISION**: Simplify the communication of your different modules in your web application.
**MISSION**: Normalize the entry point of a module, without interfering with your domain-business logic.
Splitting your project into different modules help in terms of maintainability and scalability.
It encourages your modules to interact with each other in a unified way by following these rules:
- Modules interact with each other **only** via their **Facade**
- The [**Facade**](https://gacela-project.com/docs/facade/) is the *entry point* of a module
- The [**Factory**](https://gacela-project.com/docs/factory/) manage the *intra-dependencies* the module
- The [**Provider**](https://gacela-project.com/docs/provider/) resolves the *extra-dependencies* of the module
- The [**Config**](https://gacela-project.com/docs/config/) access the project's *config files*
### Installation
```bash
composer require gacela-project/gacela
```
### Module structure
You can prefix gacela classes with the module name to improve readability. See more [about gacela](https://gacela-project.com/about-gacela/).
An example of an application structure using gacela modules:
```bash
application-name
├── gacela.php
├── config
│ └── ...
│
├── src
│ ├── ModuleA
│ │ ├── Domain
│ │ │ └── ...
│ │ ├── Application
│ │ │ └── ...
│ │ ├── Infrastructure
│ │ │ └── ...
│ │ │ # These are the 4 "gacela classes":
│ │ ├── Facade.php
│ │ ├── Factory.php
│ │ ├── Provider.php
│ │ └── Config.php
│ │
│ └── ModuleB
│ └── ...
│
├── tests
│ └── ...
└── vendor
└── ...
```
### Documentation
You can check the full documentation in the official [website](https://gacela-project.com/).
### Examples
You can see examples using gacela in [this repository](https://github.com/gacela-project/gacela-example).
### Contribute
You are more than welcome to contribute reporting
[issues](https://github.com/gacela-project/gacela/issues),
sharing [ideas](https://github.com/gacela-project/gacela/discussions),
or [contributing](.github/CONTRIBUTING.md) with your Pull Requests.
---
> Inspired by Spryker Framework: https://github.com/spryker