After my first attempt at adding the ALU to an already pretty messy Registers solution I could feel the spaghetti creeping in, so I decided to totally reorganize things around a strict control hierarchy to save myself a lot of pain in later levels.
The Master Decoder Unit (MDU) takes in the program and gives simple, decoded instructions to subordinate chips which move data around only as they're directed. The two main subordinate chips, accomplishing the valuable task of avoiding memory spaghetti, are the Memory Input Controller and Memory Output Controller (MIC and MOC) which only see incoming commands in a heavily processed state, and even then only when they actually need to.
Buses are not real and they cannot hurt me.