Что самое главное в проекте? Чтобы он работал правильно. Но написания работоспособного кода будет недостаточно. Очень важно его правильно организовать. Каким бы сложным и объёмным ни был проект обязательно нужно уделить время на продумывание его архитектуры.
Нет каких-то чётких правил и законов, как должен быть организован код проекта. Нужно стремиться к тому, чтобы он был удобен и понятен к восприятию, расширяем и (по возможности) решал только те задачи, которые на него возлагаются. Ранее я писал о том, что предпочитаю работать с объектами сущностей как с элементами предметной области и продолжу придерживаться этой мысли.
Чтобы на кухне появился хлеб мы не можем его просто создать. Мы можем его испечь, купить, украсть — и это конкретные понятные действия, у которых есть свои правила, своё поведение. Такие действия называют логикой предметной области или бизнес-логикой.
Общая схема
Слой представления
Предположим, имеется форма для добавления элемента. Её задача в удобном виде позволить пользователю ввести требуемые данные и передать их для обработки дальше. На этом задача слоя прелдставления завершена.
Слой приложения
Получает информацию о пользователе, принимает данные с формы и решает дальше, что с ними делать. Если данные корректны, а пользователь имеет права на выполнение операции, то передаёт управление слою бизнес логики, в котором и будет выполнено требуемое действие.
Таких контроллеров может быть несколько. Например проверка прав доступа при выполнении какого-то действия может отличаться при выполнении из web формы, консольного скрипта или через REST API, при том, что само действие будет выполняться одинакого, с точки зрения логики, для всех вариантов.
Слой бизнес-логики
(сервис слой) Содержит в себе всю логику работы приложения. Описывает действия, представленные на диаграмме вариантов использования.