Prologue
If you're not interested in the story and philosophy behind, skip directly to the next section: Overview »
Main Goals
- Provide a platform on top of Laravel for extensible business applications.
- Establish the foundation for layered applications.
- Provide a system for using/creating a plugin-like modular architecture.
- Have a system that can embrace decoupled modules, so that we can get rid of duplications across projects.
- Establish a framework where specific modules can be customized, or even replaced.
- Standardize usage of Eloquent models and so that they can easily be extended/customized in final applications.
Main Considerations
- Laravel 5.4+
- Follow Laravel's standards and practices.
- Don't duplicate functionality that exists in Laravel
- Keep the developer's liberty so that it's not a nightmare to implement/customize things.
- Avoid over-engineering.
- Accept ActiveRecord, instead of fight against.
Inspirations
- Monolithic vs. modular - what's the difference?
- Creating a Modular Application in Laravel 5.1
- Modular Structure in Laravel 5
- Caffeinated Modules
- Caffeinated Presenters
- Caffeinated Themes
- Caffeinated Repository
- Symfony Bundles
- Sylius Resource Component
- https://github.com/creolab/laravel-modules
Who Is It For?
Concord adds some features and therefore additional complexity to the Laravel Framework. So think twice if you really need it.
Concord is not for you if
most of these apply to you:
- "I'm writing one simple application."
- "I have no need of code reuse in multiple applications."
- "My code is organized enough."
- "I know how to write my stuff, and I'm OK with it."
- "The amount I'm copypasting is fine."
- "Applications I develop have not too much in common."
- "I prefer to complete tasks as quickly as possible."
Concord is for you if
most of these apply to you:
- "I need reusable business functionality."
- "I'm fed up with writing the same stuff over and over again."
- "My code organization isn't always consistent."
- "I often think about where to put a class."
- "Sometimes I look for code design advice on the net, but everything turns out to be relative."
- "Sometimes I'd be happy to have some guides on code organization and design."
- "I rather spend some extra time now for creating good foundations."
- "Clean code is not about aesthetics but about robust systems."
One of the main reasons I gave Concord birth for was my need for Reusable Business Functionality. In most of the cases there's no need for that.
Recommended reading: 10 Modern Software Over-Engineering Mistakes.
OK, you've been warned :)
Next: Overview »