![]() |
#11 |
Участник
|
Цитата:
Предположим, у вас есть метод X класса Y у метода есть его публичный интерфейс:
И есть реализация (например он может изменить приватную переменную невидимую снаружи). Если расширения смогут отменять вызов какого угодно метода, то состояние объекта может быть испорчено. Так как ваше расширение не может учесть внутреннее состояние объекта будущих версий. Например в версии 1 вы написали расширение отменяющее вызов метода x целиком и как-то сымитировали его работу без того, что нам надо. И есть реализация (например он может изменить приватную переменную невидимую снаружи). Если расширения смогут отменять вызов какого угодно метода, то состояние объекта может быть испорчено. Так как ваше расширение не может учесть внутреннее состояние объекта будущих версий. Например в версии 1 вы написали расширение отменяющее вызов метода x целиком и как-то сымитировали его работу через публичный интерфейс. В версии 1 sp 1 внутрь добавили кеш, которое ваше расширение обновить не может (не только потому, что оно не может модифицировать приватные поля, но и потому, что оно написано для версии 1, про sp1 не знает) в результате остальные методы класса берут данные из кеша устаревшие. Собственно, если сделать подмену произвольного метода, то это и будет практически оверлееринг, но без удобного способа смотреть изменения. Последний раз редактировалось belugin; 04.10.2017 в 21:23. |
|
Теги |
chain of command, extensions |
|
|