External Facades Are More Like Microservices

External Facades Are More Like Microservices

They’re all running in one process, but the choices informing their
grouping should be made from the same perspective. In particular, you
should try to group methods such that related things change at the same
time, so that you avoid triggering api-wide version bumps. For example,
a Service facade and a Machine facade will contain service- or machine-
specific functionality, but neither should contain functionality shared
with the other. For example, status information: a Status facade that
lets you get detailed statuses for any set of tag-identified entities is
a much better idea than implementing Status methods on each entity-
specific facade, because then you’re free to evolve status functionality
without churning all the other facade api versions.

The fact that they’re still all talking to the same monolithic state
implementation underneath is a bit of a shame, maybe, but it will do us
no harm to structure our public face after the architecture we’d like
rather than the one we have.