Для начала управлять доступностью кнопки - это не задача бизнес логики
а откуда кнопка узнает, что она недоступна? С полями и вводом согласен, можно пошаманить и вынести. Но вот к примеру, если ты пошел в сеть и тебе надо задизейблить кнопку или показать прогресс, то как иначе?