There is a difference between a local dependency and a system dependency. On the local scale, the classes do not depend on EventSink to work. So on a local scale, it should not affect the constructor.
A surface can emit events. A surface can have an ID. However those are not required attributes for the surface to be created and work as a surface.
No amount of "modern C++ tradition" supersedes the basic programming ideal of low coupling.
There is a difference between a local dependency and a system dependency. On the local scale, the classes do not depend on EventSink to work. So on a local scale, it should not affect the constructor.
A surface can emit events. A surface can have an ID. However those are not required attributes for the surface to be created and work as a surface.
No amount of "modern C++ tradition" supersedes the basic programming ideal of low coupling.