Вероятно, проще начать с того, что не бизнес-логика. Доступ к базе данных или диску не является бизнес-логикой. Интерфейс не бизнес-логика. Сетевые коммуникации не являются бизнес-логикой.
Для меня бизнес-логика - это правила, которые описывают, как работает бизнес, а не как работает архитектура программного обеспечения. Бизнес-логика также имеет тенденцию меняться. Например, это может быть деловое требование, чтобы каждый клиент имел одну кредитную карту, связанную с его учетной записью. Это требование может измениться, чтобы клиенты могли иметь несколько кредитных карт. Теоретически, это должно быть просто изменение бизнес-логики, и другие части вашего программного обеспечения не будут затронуты.
Так что это теория. В реальном мире (как вы обнаружили) бизнес-логика имеет тенденцию распространяться по всему программному обеспечению. В приведенном выше примере вам, вероятно, потребуется добавить еще одну таблицу в базу данных для хранения дополнительных данных кредитной карты. Вам, безусловно, нужно изменить пользовательский интерфейс.
Пуристы говорят, что бизнес-логика всегда должна быть полностью отдельной, и поэтому она будет против использования таблиц с именами «Клиенты» или «Счета» в базе данных.
Взяв его до крайности, вы получите невероятно общую систему, которую невозможно обслуживать.
Определенно есть веский аргумент в пользу сохранения большей части вашей бизнес-логики, а не размазывания ее по всей системе, но (как и в большинстве теорий) вы должны быть прагматичными в реальном мире.