gacela-project / gacela

Build modular PHP applications.
http://gacela-project.com/
Other
128 stars 7 forks source link
framework gacela library modular php

Gacela logo

GitHub Build Status Scrutinizer Code Quality Scrutinizer Code Coverage Psalm Type-coverage Status Mutation testing badge MIT Software License

## 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