Изучая MVC встал вопрос, как реализовывать классы для роботы с БД и роутером? Видел разные реализации, в одних объекты таких классов не создаются и просто вызываются статические методы, в других же создается объект и вызывают его методы. Разница не так велика, однако что лучше в данных случаях? И в подобных ситуациях, когда у какого-то объекта есть всего один экземпляр(типо того же роутера или бд), как поступать?
>>2153439Статические методы в таких случаях это плохо, почему, я объясняю в уроке по DI: https://github.com/codedokode/pasta/blob/master/arch/di.mdЕсли кратко: - статические свойства "отравляют" код и вынуждают делать его весь в таком стиле. Например, ты сделал класс для работы с БД на статических методах. А ему нужно где-то брать конфиг, получается придется и класс конфига сделать на статических методах - при использовании статических методов нельзя создать 2 объекта с немного разными настройками. Например, нельзя создать 2 объекта для работы с двумя БД. Или два соединения с одной БД. Это мешает при тестировании. В тестах мы хотим создать объект, попользоваться им и выкинуть, чтобы после этого не осталось никаких следов. У тебя же после теста в классе остается состояние в статических полях и оно может повлиять на другие тесты. - при использовании статических методов нельзя заменять зависимости. Например, нельзя сделать второй класс работы с БД и подсунуть его вместо основного, так как в коде жестко прописано его имя. Это мешает делать подмену в тестах, а также при использовании сторонних библиотек. Нельзя заменить роутер на другой (например, с функциями отладки).- вместо того, чтобы получать настройки через конструктор, класс со статическими методами сам их откуда-то берет. Это делает код менее логичным и понятным.То, что в твоем случае тебе нужен лишь один экземпляр класса - это не повод использовать статические методы или синглтоны. Нужен один экземпляр - создай его с помощью new и используй.
>>2154190>Нужен один экземпляр - создай его с помощью new и используй.Все это конечно заебись на бумаге. Но в случае конекшена к базе именно что НЕЛЬЗЯ давать возможность создать несколько коннекшенов. И это именно что повод использовать синглтоны и статические методы.
>>2154242>И это именно что повод использовать синглтоны и статические методы.Всегда спрашиваю про область применимости синглтонов на собесах и как только слышу подобное - собес провален.
>>2154250Нихуя ты жесткий. Ну такому жесткому в самый раз бегать с порванной сракой и считать инстансы коннекшенов к базе когда они закончились. Попутно еще вытирать с лица струю мочи от дба, которому ты сказал что тебе нужно только 50.
>>2154195Во-первых, изменение PATH через настройки компьютера требует перезагрузки, чтобы настройки применились.Во-вторых, проверь, действительно ли PATH поменялся, командой echo % %PATH% % (без пробелов между процентами)>>2154242Иногда нужен отдельный коннект. Бывает, что баз несколько, например slave/master.Чтобы не было возможности сделать несколько коннектов, используют DI контейнер и берут соединение из него, а не создают каждый раз вручную с помощью new.
>>2154451>используют DI контейнер и берут соединение из него, а не создают каждый раз вручную с помощью new>Нужен один экземпляр - создай его с помощью new и используй.Мне поебать че там кто берет или не берет. Какие-то гарантии можно получить только если физически невозможно проебать в никуда коннект. Вас кукаретиков за километр видать. Вы просто не понимаете насколько "некрасивый код" мелкая хуйня в сравнении с отвалом базы.
>>2154260>бегать с порванной сракой и считать инстансы коннекшенов к базе когда они закончилисьСразу видно дурачка, не умеющего в инъекцию зависимостей. Бегать с порванной сракой будешь ты, когда у тебя случится шардинг, кек.