LegacyShop — учебный проект «с запахами»¶
Маленький работающий интернет-магазин на C#. Собирается, запускается, честно считает заказы и печатает чек. И при этом написан так, как пишут, когда фичи нужны были «на вчера», а рефакторинг всё время откладывали.
Зачем он здесь¶
Разбирать запахи кода на своём проекте плохо тем, что каждый разбирает своё: у одного код на 100 строк без единого запаха, у другого — на 5000 и не понять, с чего начать. Сравнивать такие работы между собой невозможно, обсуждать на занятии — тоже.
Поэтому здесь лежит один общий проект для всех. В нём заранее заложено больше двадцати запахов из каталога лекции 2 — все пять групп представлены. Задача студента — найти их и назвать.
Проект намеренно небольшой (около 1200 строк): его реально прочитать целиком за вечер, а значит, «не нашёл» здесь означает «не увидел», а не «не успел».
Что это за магазин¶
Консольное приложение проходит два сценария:
- обычный покупатель, доставка курьером, оплата картой, купон на скидку;
- VIP-покупатель, наличные курьеру, часть товара на складе кончилась.
По дороге считаются скидки и стоимость доставки, резервируется товар, уходят уведомления на почту и в SMS, печатаются чек и два отчёта, делается выгрузка в CSV.
Структура¶
| Папка / файл | Что внутри |
|---|---|
Program.cs |
демонстрационный сценарий, точка входа |
Model/ |
сущности: товар, категория, покупатель, корзина, заказ, строка заказа |
Payments/ |
способы оплаты и их проверки |
Services/ |
вся логика: оформление заказа, склад, отчёты, уведомления, хранилище |
Как запустить¶
Нужен .NET SDK 8.0 или новее. Если стоит только .NET 9/10, запуск всё равно сработает:
Ничего устанавливать и настраивать больше не нужно: ни базы, ни интернета — письма и SMS просто печатаются в консоль.
Как с ним работать¶
- Читайте код, а не только запускайте. Запахи не видны в выводе программы: она работает. В этом и смысл — запах не ошибка, а обещание боли в будущем.
- Называйте запахи по каталогу из лекции. «Тут некрасиво» — не ответ,
«Feature Envy,
ReportBuilder.FormatCustomer, строки 55–68» — ответ. - Один и тот же кусок кода может пахнуть двумя запахами сразу. Это нормально, но в таблице это две строки с разным обоснованием, а не одна.
- Не всё подозрительное — запах. Если считаете, что здесь длинный метод оправдан, так и напишите: это тоже разбор.
Одно правило. Ответы не спрятаны в истории коммитов, в ветках и в issue репозитория — искать их там бессмысленно. Список запахов существует только у преподавателя, и на защите вопрос будет один: почему это запах и чем он обернётся через полгода.
Дальше¶
Найденное нужно не только выписать, но и починить — часть работы состоит в том, чтобы применить приёмы рефакторинга под тестами, ничего не сломав. Условие — в задании, которое пришло вам в issue.