The Observation framework lets SwiftUI track which observable properties a view reads. When one of those properties changes, SwiftUI invalidates views that formed a dependency on it. The @Observable macro synthesizes observation behavior while your model remains an ordinary Swift type with explicit properties and methods.
A view can own an observable reference by storing it in State. Child views that only read the model accept it as a normal property. A child that needs bindings to observable properties uses Bindable. This keeps ownership, reading, and editing as separate decisions.
The environment can distribute a model or service through a subtree when many descendants need it. Environment access is not a replacement for architecture: create the dependency at a clear composition root, inject it deliberately, and keep feature APIs explicit where practical.