Packages: What? Why? How? How exactly? Why so many?
What the hell IS a "package"?
In software development, it means a set of classes that are tightly coupled: If you change one, you have to change them all, kind of thing. Usually, the classes that cooperate in a Design Pattern are tightly coupled, for example. Classes that deal with a particular common data type, is anothe example.
It may statistically correlate with “having a common function”, but this is not necessarily so. A package may have more than one interface.
How?
The Deeplayer standard is to give packages short names. The names are used,
- For the folder that will contain the sources in a package.
- The namespace under which the package exists.
Only the interface(s) (header file(s), of course) are in the plain namespace. Implementations exist under a namespace “priv”, nested in the package namespace.
How Exactly?
That which makes the classes in a package so interdependent, must therefore NOT be exposed through the interface. Otherwise the purpose of the package isn’t served.
Sounds like a pattern...
Unlike a pattern, which has a single function and interface, a package may have multiple functions and interfaces. The only defining characteristic of a package, is tight coupling.
Sounds like a dll...
Unlike a dll, a package has no implied expectations of sharing, dynamic loading, or frequent updating. A package implies only an expectation of inter-correlated updates, whether frequent or not.
This is hard
It is. I’m trying to identify packages in advance, but probably wasting my time. Package identification is supposed to be a discovery process, during development.


