Какой подход к проектированию бэкенда лучше? В чем принципиальная разница между подходами?

Например, контроллер на Node.js можно написать так:
export class UserController {
    static async login(req, res) {
        try {} catch(e) {}
    }
}


А можно так:
const login = async (req, res) => {
    try {} catch(e) {}
}

const controller = { login }
export default controller


Иначе говоря, в ООП-шном стиле и в функциональном (если я правильно понимаю).
Есть ли принципиальная разница между этими подходами? Сталкивался с кодом написанным и так, и так. И сам писал в одном проекте - так, в другом - иначе. Но то ли не сталкивался с какими-то специфическими для каждого подхода ситуациями, то ли еще что, но не могу для себя решить, какой подход правильнее использовать. Пока возникает ощущение, что всё это - сугубо вкусовщина. Так ли это? И какие еще есть подходы? Что можно почитать/посмотреть на эту тему?
  • Вопрос задан
  • 281 просмотр
Решения вопроса 3
AlexNest
@AlexNest
Работаю с Python/Django
Есть ли принципиальная разница между этими подходами?

Ну, как бы да - в первом случае используются классы, во втором - функции. В этом
какой подход правильнее использовать. Пока возникает ощущение, что всё это - сугубо вкусовщина.

Это, имхо, вопрос размера проекта и сложности ориентирования в нем. То есть, для простой КРУД-ориентированной системы классы могут быть излишни. Но чем больше логики вынесено за пределы "чтения-записи" из БД, тем ощутимее нужны будут классы.
И какие еще есть подходы

Есть еще процедурное, но оно сейчас используется исключительно для простых программ и на скриптовых языках по типу питона и ванильного js.
Ответ написан
Комментировать
@raiboon
А где вы видели то, что у вас во втором примере?
Так не имеет смысла писать, это не особо "функциональный" подход, главная проблема в том, что нельзя передать заивисимости.
А вот так уже имеет смысл:
export const login = (authService) => (req, resp) => {
	// do something
}


В целом, если у фреймворка/проекта есть устоявшийся подход - используем его. Если нет, то подход на функциях более идиоматический - в последние годы он более привычен большинству js-программистов, все почему-то двигаются в сторону функциональщины.
Ответ написан
Комментировать
bingo347
@bingo347 Куратор тега Node.js
Crazy on performance...
Иначе говоря, в ООП-шном стиле и в функциональном (если я правильно понимаю).
в обоих случаях процедурный стиль

Пока возникает ощущение, что всё это - сугубо вкусовщина
По сути да, чисто вкусовщина.
Хотя второй вариант будет лучше сжиматься terser'ом если поменять
const controller = { login }
export default controller
на export default loginНо для ноды terser редко используют
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@romicohen
Системный Архитектор
И какие еще есть подходы?

Laravel например :)

Кроме шуток: - JS - всё-таки язык для фронта, и его основное преимущество над другими языками в том, что он исполняется в любом браузере. Других преимуществ у него попросту нет :D
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы