In this topic I will tell you a bit about the use case I am interested in, namely:
“Easing federated app development for the Fediverse”
W3C AtivityPub Recommendation is an actor-based protocol that allows federated communication based on a simple HTTP API where Actors (Person, Organization, Service, Application) exchange JSON-LD messages via inbox & outbox endpoints. This extensible protocol is the basis of the Fediverse where a large number of diverse apps interoperate and more than 5 million users interact.
It makes sense for a federated app to be actor-based internally as well, where server-to-server messages are handled by a Federation actor and delegated to e.g. Person actors referenced in the message. In my app design modularity and extensibility are key, and I intend to use domain-driven design ports & adapters architecture (similar to ftpgogo example project).
I won’t be using gRPC over the network (where I use AP), but was intending to use Hashicorp’s go-plugin (which uses gRPC) to have a dynamic plugin system and ability to add/remove module extensions dynamically at runtime. I still need to check if/how this can be combined with proto.actor (Proto.Remote?).
As for where DDD kicks in, I feel most for Alexey Zimarev’s approach to have actors in the application layer and keep the domain layer free of actor concerns (in contrast to Vaughn Vernon who talks about turning domain aggregates into actors).
Would be lovely if you could shine a light, give some feedback on this setup as it relates to proto.actor…
Update: I posted about this on the Fediverse here: https://mastodon.social/web/statuses/106396236289530868