Designing for Composability
The type system is what lets Dagger workflows keep going. A well-typed result can be passed to another function, another module, a generated client, a check, a generator, or an agent.
Composable Return Values​
Return values should help the caller continue the workflow:
- Return
Containerwhen the caller may still run, publish, export, or inspect it. - Return
DirectoryorFilewhen the caller needs artifacts. - Return
Servicewhen another step needs a live endpoint. - Return
Changesetwhen the module proposes source edits. - Return a user-defined object when the caller needs a domain concept with more methods.
Avoid Dead Ends​
Strings and logs can be useful final outputs, but they are often dead ends. If a caller has to parse text to continue, the module probably returned too little structure.
Composition Across Modules​
Design return types so other modules can consume them without knowing implementation details. This is where type design and interface design meet.
TODO: Cross-link this chapter with Interfaces and Composition after the interface guide is expanded.