Re[12]: Догонит ли net java?
От: · Великобритания  
Дата: 05.12.22 18:39
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>А что там внутри этих updateBBB()?

Там ещё могут быть простыни кода, ведь у нас 40 полей которые надо по всякому вычислять и проставлять. Если модификация p происходит очень сложно, то хочется это всё разрезать на мелкие кусочки по разным методам или даже классам, иногда даже реюзабельным из разных мест.

S>Почему нельзя просто сделать тот же With? Ведь при присванивании "в себя же" ескейп-анализ уберёт всю лишнюю нагрузку на GC, в итоге имеем тот же перформанс, лаконичный синтаксис, и отсутствие необходимости для каждого DTO еще и цельный билдер расписывать.

Как я понял, ты предлагаешь что-то вроде
public Person modify(Person p) {
  p = updateAAA(p);
  ...
  if(...) p = updateBBB(p);
  else p = updateCCC(p);
  ...
  p = updateDDD(p);
  return p;
}

но это тоже частный случай, да и выглядит коряво, имхо. Захочется манипулировать одновременно двумя билдерами, то опять что-то новое придумывать:
public Result enrich(Person p, Order o) {
  var iBuilder = Info.newBuilder();
  var pBuilder = p.builder();
  var oBuilder = o.builder();
  updateAAA(pBuilder, iBuilder);
  updateBBB(oBuilder, iBuilder);
  updateCCC(oBuilder, pBuilder);
  return new Result(pBuilder.build(), pBuilder.build(), iBuilder.build());
}

как тут можнро сделать красивее?

Лично мне пока самым удобным показалось то, что генерирует Avro, как тут. (генерацию setters для самих dto можно запретить, оставить только у билдеров).

S>·>Ты прав. Можно только новый тип создавать оказывается.

S>Переходите на сторону CLR. У нас всё это есть Включая "annotation processors"
Нее... мы мееедленно спускаемся.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.