In a way similar to protected methods, constructor signatures of service-like objects are generally not stable. They are intended for use by wiring code, and can be expected to change without notice. Extensions (and all application logic) should ideally only ever directly construct plain value objects. However, we still have quite a number of things in core that are neither service objects nor value objects. So I propose to add the following to the "Don't" section:
- MUST NOT: directly instantiate a service class defined by core, instead of obtaining an instance via a service container.
- SHOULD NOT: directly instantiate anything that is not a plain value object.