Когда допустимо нарушение соответствия CLS? - PullRequest
2 голосов
/ 12 февраля 2009

Мне было интересно, какие существуют крайние случаи, которые могут сделать соответствие спецификации общего языка приемлемым. Даже если нет намерения получить доступ с других языков, я думаю, что принципы, утвержденные CLSCompliantAttribute, являются хорошими передовыми методами.

Встречались ли вы / знаете ли вы случаи, когда YAGNI перевешивает лучшие практики?

Ответы [ 3 ]

5 голосов
/ 25 сентября 2009

"[sic] Какой смысл быть совместимым с CLS?"

Среднее доверие , ClickOnce , запускается с общего сетевого диска, гостевых профилей в настройках домена и т. Д. Существует множество ситуаций безопасности, когда ваш код не может работать, если вы нарушите Соответствие CLS.

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

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

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

4 голосов
/ 12 февраля 2009

Ну, массивы "params" для атрибутов иногда просто соблазнительны (но не соответствуют). Но я бы рекомендовал использовать CLS-совместимые подходы всякий раз, когда это возможно.

3 голосов
/ 12 февраля 2009

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

Но эти несовместимые интерфейсы должны быть затем повторно инкапсулированы на более высоком уровне.

...