Giter Club home page Giter Club logo

deedcurrencypay's Introduction

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.

deedcurrencypay's People

Contributors

antgerasim avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.