Вы принимали решения о выборе технологий в текущем проекте?

Ответ

Решения принимались совместно с командой, но я активно участвовал в обсуждениях и предлагал варианты, которые затем согласовывались.

Примеры моих предложений и их обоснование:

  1. JPA вместо "чистого" Hibernate:

    • Почему: JPA — это стандарт, который обеспечивает большую переносимость кода между разными реализациями ORM.
      @Entity
      public class User {
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      private Long id;
      private String name;
      // Геттеры и сеттеры
      }
  2. Внедрение Project Lombok:

    • Почему: Для сокращения шаблонного кода (boilerplate) — автоматической генерации геттеров, сеттеров, конструкторов. Это повышает читаемость и упрощает поддержку.
      @Data // Генерирует геттеры, сеттеры, toString, equals, hashCode
      @Entity
      public class Product {
      @Id
      private Long id;
      private String title;
      }

Все предложения обсуждались с архитектором и командой для оценки влияния на проект.

Ответ 18+ 🔞

Вот, представляешь, сидим мы, значит, на совещании, как обычно, пиздим про архитектуру. Все такие умные, в ус не дуют. А я, блядь, сижу и думаю: "Ну чё, опять будем изобретать велосипед с квадратными колёсами?". И начал я им мозги ебать своими идеями, ну, в хорошем смысле. Не то чтобы я один всё решал — нет, мы коллективно голову ломали. Но я был этот... как его... катализатор, блядь. Подкидывал варианты, а они уже их обсасывали, как мартышки банан.

Вот, например, приперся я с темой по JPA. Все вокруг на Hibernate молятся, как на икону. А я такой: "Мужики, вы в курсе, что JPA — это, по сути, стандартная обёртка? Это как взять 'Жигули' и назвать их 'Ладой' — та же хрень, но по паспорту приличнее". Суть в том, что если завтра нам взбредёт в голову сменить провайдера ORM, то с JPA мы не обосрёмся полностью. Код останется рабочим, а не превратится в тыкву в полночь. Вот смотри, как это выглядит, просто и элегантно, без лишней магии:

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    // Геттеры и сеттеры
}

Видишь? Никаких SessionFactory, никаких привязок к конкретной либе. Чистая абстракция, мать её. Архитектор сначала покрутил у виска, но потом, когда я ему на пальцах объяснил про вендор-лок и будущие боли в жопе, он такой: "А ведь и правда, ёпта...". Команда тоже вроде как за.

А второй мой конёк — это Lombok. Боже, сколько же я видел этих бесконечных геттеров и сеттеров... Руки просто отваливались это писать. Целые классы, состоящие на 80% из этой однообразной хуйни. Я пришёл и сказал: "Ребят, мы что, в каменном веке? Давайте автоматизируем эту рутину, ебать её в сраку!". Предложил внедрить Project Lombok.

Обоснование было проще пареной репы: меньше кода — меньше ошибок, выше читаемость, и не нужно каждый раз обновлять equals с hashCode, когда поле добавил. Смотри, как красота получается:

@Data // Генерирует геттеры, сеттеры, toString, equals, hashCode
@Entity
public class Product {
    @Id
    private Long id;
    private String title;
}

Одна аннотация @Data — и ты, сука, король! Конечно, были сомнения: "А как это в IDE отобразится?", "А не сломает ли что?". Мы всё это, естественно, с архитектором и командой обсудили, почесали репу, потестировали на песочнице. В итоге пришли к выводу, что профит — овердохуищный, а риски — минимальные. Так что теперь у нас код стал чище, а жизнь — немного прекраснее.