23 подписчика
Не знаю, называется ли это признанием в любви или нет, но.
Что касается Java (так-то я в основном на работе сейчас использую C# и TypeScript), прямо вот офигеть люблю библиотеку Lombok и фреймворк Spring.
Я даже затрудняюсь назвать коэффициент, во сколько раз эта парочка ускоряет мою работу.
Кто пишет на Java, может дальше не читать, а разработчикам на других языках, наверное, расскажу немного.
Lombok – это библиотека, которая берёт на себя хренову тучу бойлерплейта. Поясню. Скажем, в первых версиях C# для того, чтобы объявить свойство с тривиальными геттером и сеттером над полем, нужно было эти геттер и сеттер написать, предварив их тела в определении свойства ключевыми словами get и set соответственно. В современном C#, если геттер и сеттер тривиальные, можно это сократить, и даже само поле не объявлять – объявить сразу свойство и в фигурных скобках написать просто get; set; и всё. Поскольку Java язык более старый (многие концепции C# взяты из Java и серьёзно доработаны), там геттер и сеттер пишутся как обычные методы, с полным объявлением и так далее. А если мы используем Lombok, нам достаточно перед названием класса поставить аннотации Getter и Setter (собачку не ставлю, чтобы не вводить соцсети в заблуждение), и ко всем приватным полям геттеры и сеттеры создаются автоматически – в коде мы их не увидим, но на самом деле они будут.
Но это не всё. Используя Lombok, мы можем не писать самостоятельно тривиальные конструкторы. Аннотация NoArgsConstructor добавит к классу конструктор без аргументов, аннотация AllArgsConstructor добавит к классу конструктор, инициализирующий аргументами все приватные поля, будь их хоть полсотни, аннотация RequiredArgsConstructor добавляет конструктор, инициализирующий все поля private final – это очень удобно, когда у нас используется внедрение зависимостей (как в Spring), и если в процессе разработки понадобилось изменить набор внедряемых зависимостей, нам не надо переписывать конструктор, он автоматом будет такой, как нам надо. И так далее. Аннотация Data, к примеру, резко сокращает объём кода (и время на его написание!), когда нам нужен POJO (если кто не знает – класс, содержащий только данные, конструкторы и методы доступа, без бизнес-методов).
Название Lombok дано этой библиотеке в честь индонезийского острова Ломбок, находящегося недалеко от острова Ява (Java). Буквально слово lombok означает «перец чили», что как бы намекает на роль библиотеки в кулинарии разработки :-D
Spring Framework – это целый огромный фреймворк под Java, в котором огромная куча разных направлений. К счастью, он достаточно хорошо декомпозирован, поэтому, если нужно что-то одно, не надо тащить за собой весь фреймворк, можно подключить только то, что нужно.
Spring выполняет за меня всю (не выходящую за рамки тривиальной) работу по взаимодействию с базами данных, с ответом на веб-запросы, с обеспечением безопасности, и многое другое. С ним, например, мне вообще не нужно писать тривиальный CRUD. Если мне нужен класс, берущий на себя CRUD-операции (создание, чтение, модификацию, удаление) над сущностями из какой-нибудь таблицы какой-нибудь базы данных, я просто объявляю, что, де, пусть у меня будет интерфейс, реализующий CRUD, сущность такая-то, уникальный ключ у неё сякой-то. И всё. Spring сам создаёт класс, реализующий этот интерфейс, и сам внедряет зависимость на него везде, где я это укажу (про RequiredArgsConstructor из Lombok помним, да). А если мне надо, например, получать список всех сущностей, у которых такое-то поле равно указанному мной значению, да потом отсортировать их по значению сякого-то поля? Вот представьте, мне даже этого не надо делать самому! Допустим, я пишу свой трекер задач, наподобие любимых нами Jira, Mantis, Trello, тысячи их. Хочу я получить список всех задач определённого пользователя в обратной сортировке по дедлайну? Да легко! Я добавляю в интерфейс работы с базой метод с названием findByUserIdOrderByDeadlineDesc(Long userId); и всё. Реализацию придумывать мне не надо. Spring сам, опираясь на название метода, поймёт, что мне нужно, и реализует метод, я и кода его не увижу (ну то есть в
3 минуты
2 августа 2023