Загрузка данных
Я изучил проект VODSTROY целиком и подготовил краткий отчёт.
Краткая структура
• Решение: VODSTROY.sln
• Проект: VODSTROY (TargetFramework: .NET Framework 4.7.2)
• Количество файлов в проекте: 34 (исходники форм, DatabaseHelper, Program.cs, App.config, packages.config и т.д.)
• Точка входа: Program.cs (запускает LoginForm)
Ключевые файлы
• VODSTROY\VODSTROY.csproj — проектный файл с подключениями библиотек (ClosedXML, DocumentFormat.OpenXml и др.)
• VODSTROY\Program.cs — Main запускает LoginForm
• VODSTROY\App.config — connectionString DefaultConnection (указан локальный SQL Server Express) и binding redirects
• VODSTROY\DatabaseHelper.cs — простой helper для работы с базой (ExecuteQuery, ExecuteNonQuery)
• Формы: LoginForm, MainForm, RequestForm, CitizensForm, EmployeesForm, ServicesForm, ChangeStatusForm, EmployeeReportForm, ServicesReportForm и др.
• packages.config — список NuGet пакетов
Наблюдения и замечания
1. Подключение к базе
• В App.config в connectionStrings указан: Data Source=WIN-IT8A2M0IA42\SQLEXPRESS;Initial Catalog=VODSTROY_DB;Integrated Security=True
• При запуске у пользователя должна быть доступна эта база/инстанс или нужно поменять строку подключения.
2. Безопасность паролей
• LoginForm использует SQL-запрос SELECT COUNT(*) FROM Users WHERE Login = @login AND Password = @password
• Параметризовано (SqlParameter), но хранение паролей в открытом виде в базе не рекомендуется. Рассмотреть хеширование паролей (bcrypt/Argon2) и сравнение хешей.
3. DatabaseHelper
• Удобный простой helper. Рекомендации:
• Явно проверять ConnectionString на null и выбрасывать информативное исключение.
• Добавить обработку транзакций, если потребуется.
• Рассмотреть использование using для SqlDataAdapter (хотя он сам не IDisposable в более ранних версиях, но текущ код корректен).
4. Process.Start
• В нескольких местах (MainForm, EmployeeReportForm, ServicesReportForm) используется: Process.Start(new ProcessStartInfo(saveFileDialog.FileName) { UseShellExecute = true });
• Это корректно для открытия файла в Windows. Проверки наличия файла и перехват исключений уже реализованы в try/catch.
5. SQL-запросы
• Во многих местах строится SQL с JOIN и параметрами — используется параметризация, что снижает риск SQL-инъекций.
• Есть COUNT(*) для проверки связанных записей перед удалением — корректный подход.
6. Пакеты и совместимость
• В проекте используются пакеты, некоторые из них таргетированы на netstandard2.0 (ClosedXML, RecyclableMemoryStream). В csproj указаны HintPath к пакетам. Сборка прошла успешно в среде проверки.
• App.config содержит bindingRedirects для System.* — это нормально для смешения пакетов netstandard + .NET Framework.
7. UI-логика
• Валидация форм реализована (ValidateInput в RequestForm и пр.). Есть обработка ошибок через MessageBox.
• В нескольких местах используются значения Text полей как placeholders (LoginForm) — это рабочий, но не самый чистый UX; можно использовать Cue Banner API или отдельные Label/Watermark.
8. Поиск TODO/FIXME
• Язык репозитория проверен — явных TODO/FIXME не найдено.
9. Сборка
• Локальная сборка пройдена (фреймворк 4.7.2). Ошибок сборки не обнаружено.
Рекомендации / улучшения
• Улучшить обработку строки подключения: добавить проверку на null/пустую в DatabaseHelper и логирование ошибок соединения.
• Хранение паролей: перейти на хранение хешей (не хранить пароли в явном виде).
• Валидация и UX: заменить текст-плейсхолдер в txtLogin на корректный Watermark или Label.
• Логирование: добавить централизованное логирование (например, NLog/Serilog) вместо MessageBox для отладки/продуктивной среды.
• Безопасность и права доступа: если приложение будет развёрнуто в организации, проверить права учетной записи, используемой для подключения к БД (Integrated Security может использовать привилегированную учетную запись).
• Тесты: в проекте нет юнит-тестов — добавить тесты для логики, где возможно (DatabaseHelper можно покрыть интеграционными тестами с тестовой БД).
• Транзакции: там, где несколько связанных запросов (в текущем коде таких немного), использовать транзакции.
Если хотите, могу:
• Добавить проверку ConnectionString в DatabaseHelper и обработку ошибок (внести правку в DatabaseHelper.cs).
• Реализовать хелпер для безопасного чтения паролей/хеширование (пример: BCrypt.Net), показать, как изменить LoginForm и таблицу Users.
• Настроить базовую интеграцию логирования (Serilog) и показать пример записи в файл.
Скажите, что выполнить дальше — внести одно из улучшений (и какое именно) или предоставить более детальный анализ отдельных файлов.