Skip to content

Latest commit

 

History

History
61 lines (35 loc) · 4.5 KB

README.md

File metadata and controls

61 lines (35 loc) · 4.5 KB

DeedCurrencyPay

ASP.NET Core API

DDD и TDD пример ядра трансакции банка по основным операциям (пополнение, снятие, конвертация валют, выписка по банковскому счету).

В системе по умолчанию заведены два пользователя:

  1.   id 100104 баланс 10000 RUB, с возможностью  держать сумму в трех разных валютах (н.п IDR и USD и EUR) одновременно
    
  2.   id 100105 баланс 300000 IDR, с возможностью  держать сумму в одной валюте (IDR или USD или EUR или RUB)
    

Все пользователи и связанные с ними кошельки (accounts) хранятся в оперативной памяти и как следствие, теряют последние изменения после перезапуска решения.

При разработке были сделаны следующие допущения:

  1.   Пополнение и снятие возможно только в текущей валюте (задается ендпойнтом convert);
    
  2.   Количество конвертируемых валют задается только при создании кошелька;
    
  3.   Конвертация с одной валюты в другую  происходит с сохранением эквивалента баланса;
    
  4.   Снять пользователю в долг невозможно (т.е снимать больше чем средств в кошельке).
    

Основные URL WEB API:

3 a. Пополнить кошелек в одной из валют

https://localhost:44368/api/v1/deposit/100104/20000

3 b. Снять деньги в одной из валют

https://localhost:44368/api/v1/withdraw/100104/4000

3 c. Перевести деньги из одной валюты в другую

https://localhost:44368/api/v1/convert/100104?targetCurrency=idr

3 d. Получить состояние своего кошелька (сумму денег в каждой из валют)

https://localhost:44368/api/v1/account/100104

Технические особенности проекта:

Многоуровневая архитектура позволяет структурировать приложения на группы подзадач.Изоляция модели предметной области без подгружаемых зависимостей соседних проектов решения;

Реализация по канонам предметно-ориентированного программирования (Domain Driven Design). Проектирование с помощью тактических шаблонов, (сущность, объект, значение, репозиторий и агрегат) с целью получения высококачественной модели, максимально точно отражающая поставленные бизнес-цели;

Разработка с цикличным рефакторингом и применением принципов объектно-ориентированного
программирования, разных паттернов и методологий SOLID;

Фокус на промышленное качество кода. Написание 45 Unit тестов, в том числе на неизменяемость классов (immutability) и выверенная проверка на равенство и порядка (equality comparison), выявляло необходимость в создании кастомых классов типа struct (Currency.cs) и коллекции ValueObjectCollection.cs;

Использование продвинутых возможностей ООП языка C# (Generics, Inheritance, Polymorphism) и фреймворка Asp.NET Core 3 (глобальный обработчик ошибок, внедрение зависимости сервисов, внедрение Swagger, подгрузка IConfigurationRoot объекта для использования в базовом файле проекта MS-TEST итд);

Ориентир на применение лучших практик сообществ по программированию решений уровня Enterprise.