Hi all, There is a common Mesos pattern where a subsystem is implemented by a facade class that forwards calls to an internal Process class, eg. Fetcher and FetcherProcess, or zookeeper::Group and zookeeper::GroupProcess. Since the Process is an internal implementation detail, I'd like to propose that we adopt a general policy that it should not be exposed in the primary header file. This has the following benefits:
- reduces the number of symbols exposed to clients including the primary header file - reduces the number of header files needed in the primary header file - reduces the number of rebuilt dependencies when the process implementation changes Although each individual case of this practice may not improve build times, I think it is likely that over time, consistent application of this will help. In many cases, when FooProcess is only used by Foo, both the declaration and definitions of Foo can be inlined into "foo.cpp", which is already our common practice. If the implementation of the Process class is needed outside the facade (eg. for testing), the pattern I would propose is: foo.hpp - Primary API for Foo, forward declares FooProcess foo_process.hpp - Declarations for FooProcess foo_process.cpp - Definitions of FooProcess The "checks/checker.hpp" interface almost follows this pattern, but gives up the build benefits by including "checker_process.hpp" in "checker.hpp". This should be simple to fix however. thanks, James