2010-09-01 3 views
2

Мой босс считает себя Гуру ООП, где я считаю его программистом-любителем. Он занимается разработкой Sage, добавляя особые требования к нашим установкам Sage. Недавно он был очень взволнован отражением, он размышляет над сборками Sage в коде и сменяет частных членов и обработчиков событий. Я думал, что это не очень хорошая идея, но он застрелил меня, заявив, что Мудрец подумал, что он потрясающе, что он может это сделать. Я считал, что это была плохая практика, потому что она была неэффективной и потому, что если они меняют свою реализацию в любой момент, наш код может рухнуть. Я имею ввиду, что разработчик сделал что-то личное по какой-то причине?Использование отражения для изменения реализации

Что общего в этом отношении?

Большое спасибо и извини, если это кажется глупым вопросом.

Paul

+1

Ну это зависит от того, как все херово (или хорошо) Мудрец API является. , Иногда вы вынуждены делать глупые вещи. – leppie

+6

его злоупотребление отражением * слегка * противоречит титулу ООП Гуру. – Andrey

+0

@Andrey: +100 за этот комментарий! – Steven

ответ

4

Вы правы. Если вы зависите от деталей реализации сторонней библиотеки, лучше быть готовым переписать все, когда обновляется сторонняя библиотека, а также для неожиданных побочных эффектов при изменении какой-либо частной переменной с некоторым «невиновным» значением.

Ответ делается только в том случае, если вы на 100% уверены в том, что делаете, и готовы к последствиям.

2

Вы не должны изменять существующие сборки - результаты могут быть неизвестны и определенно не поддерживаются поставщиком сборки. Кроме того, такие изменения потеряют подписку на сборку, которая гарантирует, что сборка - это версия, отправленная поставщиком.

В принципе, ничего не может произойти, поэтому, если вы не хотите делать очень тщательное тестирование, без поддержки поставщика, чтобы отступить, держаться подальше!

1

Каждая новая версия сборки может иметь совершенно другую реализацию. Обновление программного обеспечения от Sage может полностью аннулировать код вашего Boss и потребовать полной реконструкции для восстановления той же функциональности.

Для реального примера: StringBuilder в .NET 3.5 используется string внутри, в .NET 4 он использует char[] увидеть это recent question)

+0

Спасибо за ответ и ссылку на другой пост, узнали что-то еще сегодня :) –

Смежные вопросы