This approach doesn’t scale as well. An include()
/package-based approach is:
- Heavyweight, requiring the creation of a package at every branch point in the code dependency DAG. That’s a lot of overhead just for some helper file.
- Requires a developer to look up
O(n)
code in the size of the codebasen
to track the dependencies of any individual piece of code. This is as opposed to justO(log n)
in a well-designed file-based approach. - Implicit. Within each package, dependency DAGs are held only in developer’s heads, instead of being explicitly written down. Harder to on-board people / easier to make mistakes.
- open to spooky-action-at-a-distance. It is possible for construct natural examples in which changes in one set of files will affect method resolution in unrelated parts of the code.