Дайте фидбек коду
Всем привет, я сделал свой учебный проект, но хочу узнать мнение и свои ошибки у более опытных разработчиков. Проект основан на ASP.NET CORE и Angular. Сделал что-то подобное на сайты UP-X и т.д, то есть, у меня должно выйти обычное мини-казино. В ходе разработки, у меня возникли некоторые вопросы, но вот главный:
Где лучше писать логику с БД и проверками, ибо читал мнение, что весь код должен быть в сервисе, а в контроллере одна +- строка. Но как быть тогда с конструкторами? Допустим, у меня есть контроллер и у него есть конструктор. У меня есть 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 шт):
Используйте IoC контейнер, тогда вариант останется только один, и вопрос отпадет сам собой.
Код глянул, BankCard - странное название. Вообще банковская карта это всего-лишь контейнер платежных реквизитов (которые передаются только в защищенном поле платежных сервисов и недоступны вашему серверу), а у вас это класс, в котором происходит списание денег с аккаунта, при чем это скорее всего вообще синглтон должен быть, судя по логике. Такое название класса сбивает с толку и затрудняет формирование ответа на данный вопрос. Назовите его PaymentInvoker или как-то так и зарегистрируйте как синглтон в IoC контейнере. Получайте через конструктор, через инициализацию поля такая история синтаксически уже просто не прокатит.
А технически оба предложенных варианта идентичны, разница только в написании.