Есть типы A, B, C.
У них много общего: поля (x, y), валидации, поведение.
Есть отличия: extra поля, поведение.
Идеальное решение, вид снаружи:
%A{x: 1, y: 2, super_field: 123123}
%B{x: 1, y: 2, super_field: "stroka"}
%С{x: 3, y: 4, super_pooper_field: ["a", "a"]}
Как сделать без макроса, чтобы не дублировать описание общих полей, общих валидации и другого общего. Да, у меня получилось наследование. Как сделать, чтобы не было наследования, но не было повторения описания общих частей?