В настоящее время я разрабатываю небольшую структуру ИИ (генетические алгоритмы / нейронные сети) на C # для университетского проекта.
Моя первая задача - разработка многоразового фреймворка, поэтому я делаю все, чтобы он был достаточно модульным. Я знаю, что расплачиваюсь за это (производительность), но я чувствую, что я могу больше выиграть, чем потерять (предпочтительнее иметь код вдвое медленнее, чем терять вдвое больше времени, пытаясь найти невозможное находить ошибки и терять много времени, пытаясь добавить новые вещи, которые трудно внедрить в монолитный блок кода).
Я бы хотел иметь много проверок для различных частей моего кода, в основном для утверждений. Проверьте, действительно ли при запуске метода XI находится в правильном состоянии и т. Д. Подобные утверждения полезны при разработке, но я бы хотел, чтобы они держались подальше от кода релиза (то есть, когда я решу, что хочу уйти это работает на ночь, чтобы получить мои окончательные результаты исследований).
Я вижу несколько способов сделать это:
- System.Diagonists.Assert семейство методов.
- Кодовые контракты
- Имея if (x), затем генерирует InvalidStateException (), окруженный #if DEBUG / # endif
Как бы вы это сделали и почему?
Мне также известны юнит-тесты (я их использую), но я бы тоже хотел иметь какие-то утверждения в коде.