Использование отражения для изменения реализации - PullRequest
2 голосов
/ 01 сентября 2010

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

Каково общее правило относительно этого?

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

Пол

Ответы [ 3 ]

4 голосов
/ 01 сентября 2010

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

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

2 голосов
/ 01 сентября 2010

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

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

1 голос
/ 01 сентября 2010

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

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

...