Тяжко! По-перше, Java як мова не альо — прям тухлувато якось. Вона явно стала краща відтоді, як я нею писав востаннє 15 років тому, але на цьому ґрунті нічого хорошого вже не виросте. По-друге, надлишкова інженерія в джаві відчувається явно інакше, аніж в
Але біс із ним. Справжня ж проблема — це анотації! О-о-о, тут цілий окремий світ. Джаву вивчити легко, але її самої замало. Тут на анотаціях фактично свій eDSL, а точніше навіть декілька — по одному на бібліотеку: всі ці
@Autowired, @Retention, @OneToMany, @JoinTable, @Mapper, @MappingTarget і ще три десятки. Нарешті я втямив, що мали на увазі люди, з якими я спілкувався про недоліки предметно-орієнтованих мов.Річ у тім, що взагалі-то я люблю eDSL! (Якщо хтось не знає: eDSL — це фактично якась зазвичай вузькоспрямована мова, побудована засобами іншої). І люблю мови, в котрих їх можна робити: Ruby
1. Ти створюєш це сам просто зараз.
2. Хтось поряд із тобою створює eDSL просто зараз, а ти його використовуєш.
3. Це стандарт де-факто.
У решті ж випадків це суцільний біль. Мало знати хостову мову: ти дивишся на конструкцію і розумієш, що вона значить синтаксично, але не семантично. Доводиться вчити ще декілька вбудованих мов. Я вочевидь цього поки не зробив, тому відкриваю файл, бачу там один порожній інтерфейс з пачкою анотацій — і нічого не розумію. Відкриваю інший — там те саме. Просто купа напівпорожніх файлів, їй-богу.
А компілятор з цього генерує цілі класи з методами, сам автоматично розрулює звʼязки між ними, щось там ще робить. Ти потім це запускаєш, а воно і до бази якось конектиться, і обʼєкти один в одного переганяє. Жодних конструкторів тобі з прокиданням чогось кудись. Чистенько. Але забагато магії
Класно, коли магії є трошки — додає цікавинку в розробку. Але не коли ти з 20-річним досвідом не можеш збагнути звʼязки між класами
Цікаво, чи станеться щось подібне з C++, враховуючи, що в цій мові тепер є reflection. На мою думку, навряд чи. Піду, короч, пірнати у ваш Spring, а ви поки можете глянути на чиюсь стару бібліотеку для C++, яка дозволяє писати отак (так-так, це eDSL):
using namespace xsmell;
document doc =
_
<html>_
<head>_
<title>"XSMELL demo"<!title>_
<!head>_
<body>_
<p>"Yesssssssssssssssss!"<!p>_
<img .src("chucknorris.png") .alt("sneezing eyes open")>_ <!img>_
<!body>_
<!html>
_;
std::cout << doc << '\n';


