Не делаю отдельные бранчи и пул реквесты для каждого этапа. Просто коммичу в мастер чтобы была видна история разработки - как менялось приложение с этапами.
Тестовое задание
Консольное приложение Майнер - рандомно добавляет монетки в копилку
Добавил базу Sqlite. Работа через EF Code-First. Учитывая что модели для хранения "денег всего" и "истории добавления" похожие, чтобы не дублировать код заполнения моделей - сделал простые мапперы. Грубо говоря на будущее (например появятся поля Кто, GPS координата и т.д.), можно один объект копировать в другой. С одной стороны можно использовать и триггеры, так наверное красивее, но о наличии триггеров в БД можно со временем забыть в процессе разработки.
Можно обсуждать архитектуру. Как мне кажется, в идеале должно выглядеть так:
- сделать веб сервис с API
- сделать проект Domain. В нем модели (DTO) и сервис для работы с копилкой (CRUD). Эти же модели пригодятся для работы с клиентом хаба из Этапа 4.
- из майнера теперь должен вызываться не репозиторий, а сервис. Чтобы вся работа с данными была одинаковая через сервис. Репозиторий "изолирован" от потребителей данных (майнера и вебсервиса).
- должен быть маппинг из моделей БД в модели, которые отдает API (DTO) и наоборот. Можно использовать Automapper например.
UPDATED 20.05.2024
- Сделал веб сервис с API
- Добавил сервис
- Добавил маппинг моделей из БД
- Доработал репозиторий (добавил методы для получения логов)
- Так как при отъеме монет из копилки есть какая-то логика - добавил юнит тесты. Moq библиотеку не использовал, так как репозиторий небольшой. Написал простой MockRepository, который реализует методы IRepository