Re[8]: Начать ли использовать Code Contracts?
От: Doc Россия http://andrey.moveax.ru
Дата: 13.08.15 11:56
Оценка:
Здравствуйте, Poopy Joe, Вы писали:

PJ>Надо! Или нет гарантии, что радианы не будут складываться с градусами, а размер головы с размером ноги.

Вот как раз в вашем варианте это и надо. Например: HumanHeight = HeadHeigh + BodyHeight + LegHeight
В варианте с контрактами это будут три поля int или float и просто будет сумма. А гарантии будут в тестах.
Да, эти тесы и у вас будут, но к ним еще бонусом тесты приведения типов для сложения.

PJ>Что значит приведение? Другая величина это другая величина.

А как еще сложить HeadHeigh и BodyHeight?

Doc>>*) Не всегда диапазон зависит от физической величины. Метод может вполне иметь свои ограничения.

PJ>И? Допустим метод принимает возраст и требует, чтобы он был больше 18 лет. Тогда параметр будет например Adult<Age>.
*) у вас класс Adult должен знать о Age, уметь извлекать из него значения. Лишний класс, лишние тесты, да еще и с жесткой связью.
*) Если у вас будут методы для "до 16", "до 18" и для всех. Будете еще классы создавать на каждый чих?

PJ>А чем тут помогут контракты?

Contract.Requires(18 < age);

PJ>Выкинут исключения во времени исполнения? Очень "полезно".

А что сделает Adult<Age> если Age будет больше 18?

Кстати, исключение тут вполне уместно, т.к. скорее всего это означает что у вас как-то или малолетка "пролез" через авторизацию, или где-то ошибка в логике загрузки юзеров. Ведь для метода, например, логина такой контракт не уместен (получится что вы хотите BL в контракты зашить)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.