Thanks for the clarifications Uncle Bob, but when I wrote about a "micro service architecture" I was trying to use it in the same sense that you used in the Chapter 15 - Deployment. By having component boundaries so firm and interfaces relatively stable (result of the "microservice architecture"[emphasis on the quotes]) a team
tend to favor the CRP. And the opposite, "Monolith Architecture" tend to favor the CCP.
Another question: our project (which is a monolith written in python) have this folder structure:
core/
core/payment
core/payment/usecases/
core/payment/entities/
...
core/account_creation
core/account_creation/usecases
core/account_creation/entities
...
framework/
framework/controllers
framework/models
...
All the source code is in the same git repo, and when we change something we actually redeploys the whole system (which is fast enough for us, allowing a lot of production deployments per day). Given that, can we call the "payment" and the "account_creation" packages as "components", even that they can't be deployed independently?
And given this context, some more questions:
- By separating in packages (or components) the common features, are we following the CRP? Or is it actually CCP because changes tend to happen in small portions of code?
- Given that our POST /account endpoint only uses the Account Creation usecase, can we say that the CRP is being respected?
- Given that all of this code is versioned together (all in the same repo) could we say that our REP is not "that good"?
Thanks again for the clarifications,