Цитата:
Сообщение от
trud
при этом если разобраться с точки зрения апгрейдов эта штука логически вообще эквивалентна(и даже значительно уступает) однострочному изменению при оверлеинге(т.е. когда вы изменяете существующий метод добавляя в него одной строчкой или блоком изменения строго в начало или конец),
С точки зрения рантайма я с вами совершенно согласен. С точки зрения обновления - все немного сложнее.
Когда я добавляю строчку при оверлееринге, я могу там сделать все что угодно. Часть из того, что я могу сделать там может не только нарушить работу в рантайме но и компиляцию при апгрейде (допустим в версии1 у нас не было переменной с именем i и мы добавили int i в конец, или, наборот, была какая-то переменная и мы ее использовали ). Далее, когда вы добавляете строчку в конец это означает что она должно исполнятся после остальных строчек(в том числе и дописанных кем-то другими) таким образом порядок исполнения гарантирован , в случае расширений система знает, что порядок исполнения негарантирован и может соединить расширения от разных производителей в цепочку любым способом.
Пользуясь метафорой
контракта - есть контракт между компонентом и расширением - производитель компонента может понять что он не может менять, чтобы расширения не сломались, производитель расширения понимает, что является интерфейсом, а что побочным эффектом.
И это хоть как-то формально контроллируется.