Этот список распространенных ошибок программирования представляет собой подборку проблем, которые я регулярно замечал за более чем 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, и я настоятельно рекомендую вам изучить архитектурные…