Проект для управления зоопарком на C# (.NET) Комиссарова Юлия БПИ249
Конструирование программного обеспечения Домашнее задание №1. Закрепление принципов SOLID, внедрения зависимостей средствами DI-контейнера.
Описание:
Этот проект реализует консольное приложение для управления московским зоопарком. В проекте предусмотрено добавление и управление животными и предметами инвентаря, учет расхода корма, фильтрация животных для контактного зоопарка по уровню доброты и медосмотр животных через ветеринарную клинику.
Структура проекта:
-
Zoo_Lib - библиотека классов и интерфейсов. Хранит в себе модели животных, инвентаря и сервисы для управления данными.
-
Project1_Zoo_Console - проект консольного приложения с меню для работы с данными зоопарка. Содержит точку входа, UI, реализацию DI контейнера. Использует бизнес-логику библиотеки и DI-контейнер Microsoft.Extensions.DependencyInjection.
-
Zoo_Tests - проект с Unit тестами. Проверяет логику библиотеки используя xUnit, FluentAssertions и NSubstitute. (Не зависит от консольного приложения (UI), так как UI не покрывается юнит-тестами.)
Соблюдение SOLID:
- Single Responsibility Principle: Каждый класс выполняет только одну функцию. Для этого сервисы разделены на 3: ZooService - выполняет логику требующуюся для зоопарка, VeterinaryClinic - проверяет здоровье животных, InventoryService - содержит логику работы с инвентарем. Также вся бизнес-логика вывенесна в отдельную библиотеку.
- Open/Closed Principle: У каждого обьекта есть интерфейсы, и в зависимостях предаются именно Интерфейсы а не сами обьекты, что позволяет расширять проект, не меняя существующий код.
- Liskov Substitution Principle: Подтипы (Rabbit, Monkey, Computer, Table) могут использоваться вместо базовых типов (Animal, IThing) без нарушения логики.
- Interface Segregation Principle: Интерфейсы разделены и содержат только необходимый функционал для конкретных обьектов.
- Dependency Inversion Principle: используется DI контейнер.
Сборка проекта Требования:
- Установлен .NET 8.0
- Среда разработки: JetBrains Rider (рекомендуется) или Visual Studio.
- Загруженные NuGet пакеты: xUnit(удалить пакеты nUint, если есть конфликты), FluentAssertions, NSubstitute, Moq, Microsoft.Extensions.DependencyInjection, Microsoft.NET.Test.Sdk
Запуск выполнить из корня консольного проекта (Project1_Zoo_Console): Откроется текстовое меню с выбором операций.
Использование
-
Меню управляется стрелками вверх/вниз.
-
Для добавления животного нужно выбрать его вид, ввести имя и, если травоядное, указать уровень доброты (1-10).
-
Программа автоматически проводит искусственный медосмотр(т.к. нет критериев здоровья животного) с вероятностью одобрения 80%.
-
Список животных фильтруется по доброте >5 для попадания в контактный зоопарк.
-
Инвентарь ведется с уникальными номерами для каждой вещи(животные также учитываются в инвентаре).
Запуск тестов происходит из проекта Zoo_tests. Запускать можно как отдельные тесты в каждом классе, так и все тесты класса сразу.
Примечание: папку src с проектами с кодом я создала в rider, но на github она не отображается:(
