Дайте фидбек коду

Всем привет, я сделал свой учебный проект, но хочу узнать мнение и свои ошибки у более опытных разработчиков. Проект основан на ASP.NET CORE и Angular. Сделал что-то подобное на сайты UP-X и т.д, то есть, у меня должно выйти обычное мини-казино. В ходе разработки, у меня возникли некоторые вопросы, но вот главный:

  1. Где лучше писать логику с БД и проверками, ибо читал мнение, что весь код должен быть в сервисе, а в контроллере одна +- строка. Но как быть тогда с конструкторами? Допустим, у меня есть контроллер и у него есть конструктор. У меня есть class, где есть тоже конструктор(Bankcard и PaymentsService), который я делаю в сервисе. Плодить инициализацию в контроллере и сервисе, которая будет одинаковая - как-то не очень, я так думаю. К тому же, как тогда добавить в DI все это. Пример того, что я имею ввиду(PaymentsService):

    private readonly BankCard _bankCard = new BankCard(); 
    
     //переделать в это:
    
         private readonly BankCard _bankCard;
    
         public PaymentsService(BankCard bankCard)
         {
             _bankCard = bankCard;
         }
    

Но тогда нужно передать в контроллере, где будет конструктор PaymentsService что-то, если буду там инициализировать его.

Делать так, если я не ошибаюсь, то это не очень-то правильно:

private readonly BankCard _bankCard = new BankCard(); 

Github: https://github.com/Hich1k/UpX

Меня больше интересует back, но если кто-то может посмотреть front, то я буду только рад.

Спасибо заранее всем, кто хоть немного уделил внимание этому ужасному коду, ибо для меня важно знать, где я делаю ошибки.


Ответы (1 шт):

Автор решения: aepot

Используйте IoC контейнер, тогда вариант останется только один, и вопрос отпадет сам собой.

Код глянул, BankCard - странное название. Вообще банковская карта это всего-лишь контейнер платежных реквизитов (которые передаются только в защищенном поле платежных сервисов и недоступны вашему серверу), а у вас это класс, в котором происходит списание денег с аккаунта, при чем это скорее всего вообще синглтон должен быть, судя по логике. Такое название класса сбивает с толку и затрудняет формирование ответа на данный вопрос. Назовите его PaymentInvoker или как-то так и зарегистрируйте как синглтон в IoC контейнере. Получайте через конструктор, через инициализацию поля такая история синтаксически уже просто не прокатит.

А технически оба предложенных варианта идентичны, разница только в написании.

→ Ссылка