<p>I feel I'm getting pretty good at Rust, but a problem I feel I still have is I lack a good sense of how to write "composable" Rust code. I can use structs and traits for abstractions, but my code feels very "C-like" in that behaviors are all kind of procedurally mixed up. If I wanted to, say, cleanly separate the underlying logic of an app from swappable UI implementations, I'm not sure what I'd do.</p><p>Note: I know about traits and impls, I'm asking not about syntax but *patterns*. Best practices.</p>