A healthy application is divided into macro and sub components that represent the contexts at play, whether they are related to business domain or infrastructure code.
As GitLab code has so many features and components it’s hard to see what contexts are involved. We should expect any class to be defined inside a module/namespace that represents the contexts where it operates.
When we namespace classes inside their domain:
- Similar terminology becomes unambiguous as the domain clarifies the meaning:
- Top-level namespaces could be associated to one or more groups identified as domain experts.
- We can better identify the interactions and coupling between components.
For example, several classes inside
MergeRequests::domain interact more with
Ci::domain and less with
# bad class MyClass end # good module MyDomain class MyClass end end