Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Проект BankHSE

Этот проект представляет собой консольное приложение для управления личными финансами. Приложение позволяет управлять счетами, категориями доходов и расходов, а также финансовыми операциями.

Реализованный функционал:

  • Управление сущностями: Создание и удаление банковских счетов, категорий и операций.
  • Импорт данных: Поддержка импорта данных из файлов формата CSV, JSON и YAML.
  • Экспорт данных: Поддержка экспорта всех данных в файлы формата CSV, JSON и YAML.
  • Статистика: Автоматическое измерение времени выполнения ключевых пользовательских сценариев (команд).
  • Консольный интерфейс: Простое и понятное меню для взаимодействия с пользователем.

2. Принципы SOLID и GRASP

  • SRP (Single Responsibility Principle): Каждый класс имеет одну, четко определенную зону ответственности.

    • Models (BankAccount, Category, Operation) отвечают только за хранение данных и базовую валидацию.
    • Factories (BankFactory) отвечает за создание и валидацию объектов.
    • Facades (BankAccountFacade и др.) предоставляют упрощенный интерфейс для работы с бизнес-логикой.
    • Commands (CreateBankAccountCommand и др.) инкапсулируют логику выполнения конкретных действий.
    • Importers / Exporters отвечают исключительно за логику преобразования данных.
  • OCP (Open/Closed Principle): Система спроектирована так, чтобы ее можно было легко расширять, не изменяя существующий код. Например, для добавления нового формата импорта/экспорта достаточно создать новый класс-наследник FileImporter или реализовать интерфейс IExporterVisitor.

  • DIP (Dependency Inversion Principle): Зависимости между компонентами управляются через DI-контейнер (Microsoft.Extensions.DependencyInjection). Классы зависят от абстракций (ICommand), а не от конкретных реализаций, что делает систему гибкой и тестируемой.

  • High Cohesion & Low Coupling (GRASP): Компоненты системы обладают высокой сплоченностью (выполняют одну задачу) и низкой связанностью (минимально зависят друг от друга).

3. Паттерны GoF

Для решения поставленных задач были применены следующие паттерны проектирования:

  • Фабрика (Factory)

    • Реализация: BankHSE/Factories/BankFactory.cs
    • Обоснование: Паттерн используется для централизации процесса создания доменных объектов (BankAccount, Category, Operation). Это гарантирует, что все объекты создаются в одном месте и проходят необходимую валидацию (например, запрет создания операции с отрицательной суммой).
  • Фасад (Facade)

    • Реализация: BankHSE/Facade/
    • Обоснование: Фасады предоставляют единую, упрощенную точку входа для работы с подсистемами счетов, категорий и операций. Они скрывают внутреннюю логику хранения и управления данными, делая код более чистым и понятным.
  • Команда (Command)

    • Реализация: BankHSE/Command/
    • Обоснование: Каждое действие пользователя (создание счета, удаление категории и т.д.) инкапсулировано в отдельный объект-команду. Это позволяет отделить инициатора запроса от его исполнителя и открывает возможности для дальнейшего расширения (например, для реализации отмены/повтора действий).
  • Декоратор (Decorator)

    • Реализация: BankHSE/Decorators/TimingCommandDecorator.cs
    • Обоснование: Декоратор используется для добавления новой функциональности к командам без изменения их исходного кода. В данном проекте он "оборачивает" команды для замера времени их выполнения, что решает задачу сбора статистики производительности.
  • Шаблонный метод (Template Method)

    • Реализация: BankHSE/Import/FileImporter.cs
    • Обоснование: Паттерн идеально подошел для реализации импорта данных. Абстрактный класс FileImporter определяет общий алгоритм импорта (открытие файла, парсинг, завершение), в то время как конкретные шаги (парсинг CSV, JSON или YAML) делегируются классам-наследникам.
  • Посетитель (Visitor)

    • Реализация: BankHSE/Export/
    • Обоснование: Паттерн позволяет добавлять новые операции к объектам, не изменяя их классы. В проекте он используется для экспорта данных. Доменные модели (BankAccount и др.) имеют метод Accept, который принимает "посетителя" (IExporterVisitor). Конкретные посетители (CsvExporter, JsonExporter) реализуют логику сохранения моделей в нужный формат.

4. Инструкция по запуску

  1. Склонируйте репозиторий:
    git clone https://github.com/IvanForze/BankHSE
  2. Запустите приложение: Нажмите F5 или выполните команду:
    dotnet run --project BankHSE/BankHSE.csproj

About

Этот проект представляет собой консольное приложение для управления личными финансами. Приложение позволяет управлять счетами, категориями доходов и расходов, а также финансовыми операциями.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages