Я був би таким же оборонним, як і вам потрібно. Трохи неоднозначно, я так думаю, але спробую пояснити.
Коли ви маєте право на метод, якщо цей метод має вхідні параметри, ви повинні прийняти рішення про те, якими ви очікуєте ці параметри. У ситуаціях та місцях програми це відрізнятиметься. Наприклад, якщо метод або фрагмент коду приймає дані з введення користувача, то ви хочете охопити всю основу коду і відповідно обробити будь-який вхід, будь-ласка, через повідомлення про помилку чи якийсь приємний спосіб відображення неприйнятних даних.
Якщо метод є відкритим API API. Ви не можете контролювати те, що надходить, тому слід розраховувати, що спробуєте охопити всі аспекти та програму відповідно.
Щодо методів, які виробляються в рамках основного двигуна вашого проекту, тут вам належить прийняти рішення. Чи припускаю я, що дані, що надходять, були попередньо перевірені та перевірені перед їх надходженням або я повинен вносити необхідні перевірки. Я думаю, це залежить від концептуального рівня методу і якщо це прийнятне місце для перевірки. Тому я можу врахувати:
1) Це єдине місце, яке мені знадобиться зробити цю перевірку? Чи потрібно цю змінну перевіряти в багатьох місцях для цього стану. Якщо це так, я можу зробити перевірку один раз вище ланцюга і потім набути чинності
2) Чи очікується, що інші компоненти системи працюватимуть із записаними нами методами та інтерфейсами. Якщо це так, ви можете контролювати виправлення тверджень про налагодження, виправлення виправлень, коментування методів та загальну архітектуру системи потрібний результат, чи будуть потрібні перевірки даних.
3) Які результати невдачі в даний момент у коді. Чи призведе це до того, що вся справа невдача? Чи буде виявлена будь-яка помилка в іншому місці і чи буде принаймні ця помилка виявлена
4) Чи має сенс поставити чек тут? Іноді ставити чек на частину можливих пошкоджених даних, хоча допомогти вирішити проблему в цей момент, а не помилка може допомогти приховати її. У цей момент ви можете витратити години на переслідування іншої проблеми, щоб знайти справжню проблему, тому що було перевірено дані, що повертаються назад у ланцюжку подій, які відбулися до того, про якого повідомили користувач / розробник.
Як правило, я оборонний програміст, проте я також вважаю, що при ретельному тестуванні TDD та відповідного тестування підрозділу, який ви можете поставити в контрольних кодах на необхідних рівнях і бути впевненим, що він працює так, як повинен, як тільки потрапить до будь-яких розділів нижчого рівня .