Здравствуйте, Poopy Joe, Вы писали:
PJ>Т.е. вместо проверки валидности типа на этапе компиляции ты предлагаешь выполнять проверку в рантайме и наедятся на полноту и корректность тестов? Здорово, чо.
Ну если так параноить, то что помешает в LegHeight записать размер ноги?
Doc>>*) у вас класс Adult должен знать о Age, уметь извлекать из него значения. Лишний класс, лишние тесты, да еще и с жесткой связью.
PJ>Что значит лишний класс? У нас есть какие-то ограничения по количеству классов?
Ну да, чем больше классов тем проще жить? Даешь Hello World из 100500 классов
Как там "wow: Здорово, чо."
PJ>>>А чем тут помогут контракты?
Doc>>Contract.Requires(18 < age);
PJ>Прелестно. А потом потребуется изменить возраст в зависимости от страны...
Сравнивай не с константой. Да и мне кажется что опять начинаешь мешать контракты и бизнес-логику.
PJ>>>Выкинут исключения во времени исполнения? Очень "полезно".
Doc>>А что сделает Adult<Age> если Age будет больше 18?
PJ>Вернет ошибку в момент создания, разумеется.
И как у нас конструктор вернет ошибку?
Или мы еще и factory с возвратом ошибок замутим?
PJ>Исключения вообще не слишком уместны, так как прерывают логику в случайном месте, но это отдельный разговор.
Ну во первых не в случайном месте, а вполне в конкретном.
Далее, в метод, где не может быть возраст меньше заданного пролез такой возраст. Значит программа уже в не консистентном состоянии. Так что исключению тут самое место.
Ну и опять ты путаешь BL и контракты метода.