A command based architecture is one of the designs that FRC suggests (see the TimedRobot here and command based here).
CommandScheduler.java -- I don't think we need to touch this class, but it is at the core of a command-based design; commands may specify which subsystems they interact with, and the scheduler will never schedule more than one command requiring a given subsystem at a time.
RobotCointainer.java -- define/create subsystem and command fields/objects, bind controller buttons to commands, and specify commands for autonomous routine.