Найти в Дзене
Уйти в АйТи

Классы или функции?

Оглавление

Здравствуйте, уважаемые подписчики и гости канала!

На самом деле принципиальная разница и есть и при этом иногда ее нет. Плюс все очень сильно может зависеть от ЯП. Например, если мы говорим про Java, то просто так функции вы не сделаете - не для всего это возможно. Отдельно golang - я его не особо знаю, но кажиcь там своя тема. Поэтому говорим скорее про python, php, typscript, javascript.

Картинка для привлечения внимание к посту) https://www.kartinki24.ru/kartinki/abstract/33516-abstraktnaya-akvarel.html
Картинка для привлечения внимание к посту) https://www.kartinki24.ru/kartinki/abstract/33516-abstraktnaya-akvarel.html

Чистые функции

Лично я предпочитаю иметь чистые функции в составе пакета, а не в виде статических методов статического класса. Это всякие простые реплейсы, простые валидаторы и пр. у чего нет какой-то конфигурации или глобального контекста. Очень удобно, например, просто делать какой-то реплейс - ну скажем два и более пробела заменять на один.

Сервисные дела

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

SDK и пр.

Иногда требутеся шарить целый набор сервисов между проектами и тогда можно сделать что-то типа SDK. Я очень люблю сервис ориентированность в этом вопросе. При этом врядли вы сделаете DI конечных сервисов в свой проект. Скорее вы через DI будете получать главный экземпляр точки входа в SDK. Далее из этой точки можно автокомплитом получать весь список доступных сервисов и далее вызывать их методы.

Например это может выглядеть так:

MySDK.CacheService.put(‘lalala’, 42)
MySDK.CacheService.get(‘lalala’)
MySDK.MailService.send(email, ‘lalala’)

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

Паттерн ActiveRecord

А вот классы для работы с таблицами в БД с паттерном ActiveRecord и подобное я крайне не привествую.

Плохо:

const user = MySDK.UserService.get(15)
user.setName(‘Artur’)
user.save()

Норм:

const user = MySDK.UserService.get(15)
user.setName(‘Artur’)
UserService.save(user);

Мне нравится, когда каждый занимается своим делом и классы не исключение) Объект юзера просто должен хранить инфу о юзере, а сервис должен заниматься сохранением или оптимизированным массовым сохранением. А в случае с active record ответственность размазывается. Опыт был, мне не понравилось.

---

Подписывайтесь на канал, ставьте лайки, оставляйте комментарии - это помогает продвижению в Дзене.

Кроме этого:

Подписывайтесь в Telegram: https://t.me/lets_goto_it