"If your business logic lives inside your buttons, you can never change your buttons. Keep the domain outside the view, and the view becomes replaceable."
The Comfortable Mistake
The fastest way to build a UI is to put the logic right where it's used: the component that shows a candidate also fetches it, tracks its lineage, and knows how it binds to a session. It works, it ships, and it quietly welds your entire domain to your current view framework. The day you want a different view — a native renderer, a redesign, anything — you discover the domain logic is tangled into components you're trying to throw away.
Domain Core vs View Layer
The discipline separates two things that feel like one. The domain core is what the app knows and does: the workspace state, the generation lineage, the Photoshop session binding, the document model. The view layer is how the app looks and is operated: the components, the layout, the interactions. The domain core must live outside the view layer entirely — not in the components, not depending on the view framework, ignorant of how it's displayed.
Why This Specific App Needs It
This isn't abstract future-proofing for its own sake — there's a concrete second view on the horizon. The plan explicitly preserves the option of a future native rendering layer for the canvas, if the second canvas ever becomes a heavy native renderer. That future view can only reuse the domain core if the domain core never depended on the current one. The separation is what keeps a known, planned future cheap instead of a rewrite.
The Test: What Survives a View Swap?
There's a clean way to check whether you've actually separated. Imagine deleting the entire view layer tomorrow and writing a new one in a different framework. What survives? If the workspace state, the lineage records, and the session binding all survive untouched because they never lived in the deleted components — you've separated. If deleting the view would take the domain logic with it, the logic was in the wrong place. The thought experiment is the audit.