I am looking at the PSR-7 interfaces and thinking of a way on how to implement them.
I\'ve also been reading this blog post. Apparently the objects that implement the
I suggest you to read this document, where all the design choices are explained in detail.
In particular you should read the Why value objects?
and the New instances vs returning $this
sections.
The key points are the following:
In essence, modeling HTTP messages as value objects ensures the integrity of the message state, and prevents the need for bi-directional dependencies, which can often go out-of-sync or lead to debugging or performance issues.
and
These operations can be accomplished with value objects as well, with a number of benefits:
- The original request state can be stored for retrieval by any consumer.
- A default response state can be created with default headers and/or message body.
If you want to dig deeper, I'd recommend to look in the history of the fig mailing list (you can find it here), where there was a lot of discussion regarding the immutability of the objects