是否应该将记录器注入构造函数?

时间:2014-03-11 22:23:21

标签: logging dependency-injection

我正在努力更好地理解依赖注入模式,我想到是否应该注入记录器。

我使用的语言是Python,但这个概念是不可知的。我现在所拥有的只是将单例记录器模块导入到作用域中,并在必要时调用它。例如:

import logger

class Television(object):

     def __init__(self, colour, inches):
          self._colour = colour
          self._inches = inches

     def turn_on(self):
          # do something
          logger.message('TV has been turned on')

如果我使用依赖注入,我会做这样的事情:

import logger

class Television(object):

     def __init__(self, colour, inches, logger):
          self._colour = colour
          self._inches = inches
          self._logger = logger

     def turn_on(self):
          # do something
          self._logger.message('TV has been turned on')

这使得代码更易于测试(尽管python是如此动态,以至于在测试时你可以在模块中即时模拟记录器)。

缺点是我必须通过使用替代构造函数,一些注入框架或服务定位器来处理注入。我不太确定这项努力是否能够得到回报。

我已经看过其他类似的问题,但我无法理解他们,或者答案不能让我满意:

Is it a good practice to have logger as a singleton?

Dependency injection and named loggers

Should a Python logger be passed as parameter

0 个答案:

没有答案