Правильная регистрация в контексте ООП - PullRequest
8 голосов
/ 17 сентября 2008

Вот проблема, с которой я боролся с тех пор, как впервые начал изучать объектно-ориентированное программирование: как реализовать регистратор в «правильном» ООП-коде?

Под этим я подразумеваю объект, у которого есть метод, к которому мы хотим, чтобы каждый другой объект в коде имел доступ; этот метод будет выводить на консоль / файл / что угодно, что мы будем использовать для регистрации - следовательно, этот объект будет объектом регистратора.

Мы не хотим устанавливать объект регистратора как глобальную переменную, потому что глобальные переменные плохие, верно? Но мы также не хотим, чтобы объект logger передавался в параметрах каждого метода, который мы вызываем, в каждом объекте.

В колледже, когда я рассказал об этом профессору, он не мог дать мне ответ. Я понимаю, что на самом деле есть пакеты (например, Java), которые могут реализовать эту функцию. Однако в конечном итоге я ищу знания о том, как правильно и ООП реализовать это самостоятельно.

Ответы [ 16 ]

0 голосов
/ 17 сентября 2008

Я все для АОП вместе с log4 *. Это действительно помогло нам. Например, Google дал мне эту статью . Вы можете попробовать поискать больше на эту тему.

0 голосов
/ 17 сентября 2008

Блок приложения для ведения журналов корпоративной библиотеки , созданный группой Microsoft Pattern & Practices, является отличным примером реализации инфраструктуры ведения журналов в среде ООП. У них есть отличная документация о том, как они реализовали свой блок приложения журналирования, и весь исходный код доступен для вашего собственного просмотра или изменения.

Есть и другие подобные реализации: log4net, log4j, log4cxx

В том, как они реализовали блок приложения ведения журналов Enterprise Library, есть статический класс Logger с множеством различных методов, которые фактически выполняют операцию журнала. Если бы вы смотрели на шаблоны, это, вероятно, было бы одним из лучших вариантов использования шаблона Singleton.

0 голосов
/ 17 сентября 2008

На практике, по моему мнению, метод singleton / global работает нормально. Предпочтительно глобальная вещь - это просто структура, к которой можно подключить разных слушателей (шаблон наблюдателя), например, один для вывода на консоль, один для вывода базы данных, один для вывода Windows EventLog и т. д.

Остерегайтесь чрезмерного проектирования, но я обнаружил, что на практике один класс с только глобальными методами может работать довольно хорошо.

Или вы можете использовать инфраструктуру, в которой вы работаете.

0 голосов
/ 17 сентября 2008

Я думаю, вы должны использовать для этого АОП (аспектно-ориентированное программирование), а не ООП.

0 голосов
/ 17 сентября 2008

Создайте регистратор как одноэлементный класс и затем получите доступ к нему, используя статический метод.

0 голосов
/ 17 сентября 2008

Вы можете посмотреть на шаблон Singleton.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...