Passing money as an integer means every function taking it validates it, and every one of those validations needs a test — a type that refuses to exist…
Two deployables writing the same tables is one service with extra steps. Deciding who owns them is the whole decision, and the intermediate state lasts.
The argument about whether an Order has a delivery address or a billing address is two contexts insisting on one word, and the resolution is that they each…
A repository interface returning ORM models and accepting query builders has renamed the ORM rather than abstracted it, and swapping the implementation is still impossible. Named methods rather…
Wrapping a third-party client in a class of your own achieves nothing if the class exposes the same concepts under different names — the point is to translate…
Wrapping a third-party client in a class of your own achieves nothing if the class exposes the same concepts with different names — the point is to translate…
The argument about whether an Order has a delivery address or a billing address is usually two contexts insisting on one word, and the resolution is that they…
A repository interface that returns Eloquent models and accepts query builders has not abstracted anything — it has renamed the ORM. The named method rather than a generic…
Passing money as an integer means every function taking it has to validate it, and every one of those validations needs a test. Passing a type that cannot…