Этот список распространенных ошибок программирования представляет собой подборку проблем, которые я регулярно замечал за более чем 15 лет работы инженером-программистом, а также пару дополнительных, которые я заметил в Интернете.
Размещение секретов в вашем репозитории
НЕ РАЗМЕЩАЙТЕ СЕКРЕТЫ В СВОЕМ РЕПО! Независимо от того, встроено ли это в ваш код или в файл настроек, например appsettings.json, вы не должны передавать секреты в свой репозиторий. Это может показаться небольшой ошибкой, но она на удивление распространена и имеет огромные последствия. Даже если вы сделаете новый коммит для удаления секрета, он все равно останется в вашей истории коммитов и может быть найден и использован хакерами. Если вы случайно обнаружили секрет в репозитории, над которым работаете, единственное решение — изменить (повернуть) этот секрет. Вам всегда следует использовать такую технологию, как Azure Key Vault, для безопасного хранения ваших секретов. Для дополнительной безопасности для вас даже предусмотрены сервисы автоматической ротации ваших секретов, что я очень рекомендую.
Код спагетти
Код спагетти — это неструктурированный код, который неорганизован и сложен в сопровождении, обычно смешивая несколько задач (например, получение данных, бизнес-логику, отображение пользовательского интерфейса) в одном длинном блоке кода процедурного стиля. Хотя это более распространено в динамических языках программирования, таких как PHP, возможно ли это в строго типизированных языках, таких как C#, таких как веб-API, где каждое действие содержит 100% кода, который необходимо запустить, включая проверку входных данных, извлечение данных, бизнес-логику и преобразование данных. Возьмем следующий пример:
<?php if ($currentUserIsAdmin) { echo "<div>Not allowed</div>"; } else { $sql = ""; if ($currentUserCanSeeDeletedUsers) $sql = "SELECT * FROM users"; else $sql = "SELECT * FROM users WHERE isDeleted = 0"; if ($result = $mysqli->query($sql)) { while ($obj = $result->fetch_object()) { echo $obj->Lastname . "<br>"; } $result->free_result(); } $mysqli->close(); } ?>
Этот код смешивает логику/отображение пользовательского интерфейса, получение данных и бизнес-логику в одном блоке. Если ваш код выглядит так, у вас проблема.
Определенные здесь архитектурные принципы являются отличным руководством по программированию на C#/.NET, и я настоятельно рекомендую вам изучить архитектурные…