Мой вопрос прост: должен ли я создать свой класс Debug
как singleton?
Я знаю, что одноэлементный шаблон - это плохая практика, но класс отладки не участвует в логике приложения, и он бы усложнил все приложение для ввода класса отладки в каждый класс.
Мой класс отладки будет содержать такие методы, как:
Debug::message();
Debug::dump();
Debug::spot(); // To create a timeline
// etc
Следует также отметить, что я использую пакет debugbar и что он будет присутствовать только в режиме dev, поэтому мой класс отладки будет выглядеть, если пакет присутствует, и если да, то он передаст информацию, иначе он будет просто ничего не делайте (или, возможно, записывайте важные вещи).
Итак, вы хотите сделать статические вызовы, чтобы избежать броска вокруг экземпляра вашего класса отладки. Имеет смысл.
И если вы хотите использовать статические вызовы, альтернативой синглону будет писать класс, состоящий только из статических свойств/методов.
Решение о том, идете ли вы для этого или для синглета, довольно просто: имеет ли этот класс внутреннее состояние и/или требует конструктор? Например, если вы открываете файл журнала или создаете экземпляр других объектов, вам определенно нужен синглтон.
Синглтон нахмурился, и для этого есть веские причины. Но есть ситуации, когда это имеет смысл и является допустимым подходом.
Вы отмечаете, что хотите создать временную шкалу, поэтому я предполагаю, что вам нужно инициализировать временную метку. У вас есть метод dump
, поэтому я предполагаю, что вы хотите собрать определенную информацию, чтобы свалить ее позже. Эти вещи обычно имеют состояние.
Конечно, вы могли бы вызвать какой-то Debug::init()
в верхней части каждого публичного метода, но это было бы глупо и хуже, чем синглтон.
Итак, в вашем конкретном случае, я думаю, что синглтон действительно имел бы смысл.