Software Design & Architecture
General
- SourceMaking.com - Design Patterns, Domain Design - Very large resource
- Martin Fowler - Video - Software Design in the 21st Century
Domain-Driven Design
- DDDinPHP:
- Reference:
- Videos:
- Books:
- Vaughn Vernon - Implementing Domain-Driven Design, 1st Edition(via Amazon)
- Carlos Buenosvinos - Domain-Driven Design in PHP (See below for example repositories & other corresponding resources)
- Example Repositories:
- Quotes & Notes:
- "In essence the problem with anemic domain models is that they incur all of the costs of a domain model, without yielding any of the benefits." - Martin Fowler
- "Use objects as consistency boundaries." - Mathias Verraes (Unbreakable Domain Models)
- "If multiple rules can apply to an object, there are in different contexts." - Mathias Verraes (Unbreakable Domain Models)
- "DRY is not about code duplication, but a single source of truth" - Mathias Verraes
- "Commands" in the service layer are typically use-cases
Hexagonal Architecture
- Reference:
- (Ref) Alistair Cockburn's Reference on Hexagonal Architecture
- (Article) Medium.com - Domain Models that are 100% ignorant of persistence and ORM unaware
- Carlos Buenosvinos - Slides - Hexagonal Architecture - PHP Barcelona Monthly Talk (DDD) by Carlos Buenosvinos (Where is the actual talk?)
- Chris Fidao - Fideloper - Hexagonal Architecture
- Videos:
- Chris Fidao - Talk on Hexagonal Architecture (Corresponds to above Reference)
- Talk - DrupalCon Amsterdam 2014: Models & Service Layers; Hemoglobin & Hobgoblins
- Example Repositories:
- Chris Fidao - Fideveloper.com - github: fideveloper/hexagonal-php
- Carlos Buenosvinos - github: carlosbuenosvinos/phparchitect-hexagonal-architecture-article (Corresponds to slides above)
- Small article on magazine publishing regarding above (Would love to get a hold of the magazine article which can be bought here)
- Garethp/hexagonal-ddd: Todo App
- pvgomes/symfony2biso: Symfony2 Using 'Business Isolation Layer'
- igorw/doucheswag: auction sample application (2013)
- DDDinPHP Post: "Sample/demo app list"
- Symfony Todo App
- Quotes & Notes:
- The interface is the port, and the implementations of it are the adapters to that port.
- "Hexagonal Architecture espouses a one-way flow of dependencies: From the outside, in. The Domain Layer (the inner-most layer) should not depend on layers outside of it." - Chris Fidao
- "At the boundary of our Domain Layer, we find definitions in how the outside layer (the Application Layer) can communicate with the domain objects/entities found in the Domain Layer." - Chris Fidao
- "A way to decouple your code in different layers -- a way to encapsulate variances -- a way to encapsulate what changes in your code" - Chris Fidao
CQRS
Microservices
- Video Talks
- Quotes & Notes
- "In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API." - Martin Fowler
- "The microservice approach to division is different, splitting up into services organized around business capability." - Martin Fowler
- "The microservice community favours an alternative approach: smart endpoints and dumb pipes. Applications built from microservices aim to be as decoupled and as cohesive as possible - they own their own domain logic" - Martin Fowler
- Hexagonal Layers, according to Chris Fidao
- Domain (center) -> Application -> Framework -> Infrastructure -> Persistence
BDD (Behaviour Driven Development)
- Resources
MVC / MVVM
- Resources:
- Tom Butler/j.re - Model-View-Confusion - Part 1 - The View gets its own data from the model
- Tom Butler/j.re - Model-View-Confusion - Part 2 - MVC Models are not Domain Models
- Tom Butler/j.re - MVVM, MVC it's all just roman numerals to me
- Tom Butler/j.re - MVVM in PHP Example Series, Part 1 of 4 (See site for other 3 parts)
Misc
- Resources:
If you have anything to contribute please submit a pull request.