C ++日志记录框架会牺牲可重用性吗?
时间:2020-03-05 18:46:23 来源:igfitidea点击:
在C ++中,没有实际的标准日志记录工具。以我的经验,商店会自己开店。但是,在尝试创建可重用的软件组件时,这会带来一些问题。如果系统中的所有内容都依赖于日志记录组件,则这将使软件的可重用性降低,从而基本上迫使所有下游项目都将日志记录框架及其真正所需的组件一起使用。
IOC(依赖注入)并不能真正解决问题,因为组件将需要依赖于日志记录抽象。日志记录组件本身可以添加对文件I / O的依赖关系,触发机制以及其他可能不需要的依赖关系。
在专有日志记录框架中添加依赖项是否会牺牲组件的可重用性?
解决方案
回答
是的。但是在这种情况下依赖注入将有所帮助。
我们可以创建抽象的日志记录基类,并为要使用的日志记录框架创建实现。组件仅依赖于抽象基类。然后根据需要注入实现及其所有依赖项。
回答
是的,孟德尔是对的。我们正是在我们的产品中做到这一点。一切都取决于ILogger抽象接口,但不依赖于其他任何东西。通常,可执行文件或者高级DLL将是构建实际实现的Logger接口并将其注入的文件。
回答
如果我们要构建不会重新编译的库,但想要提供日志记录接口,那么也许一种好方法是允许(库的)用户提供回调。
在使用库初始化日志记录时,他们将需要指定回调,然后由胶粘代码决定是否使其能够与所拥有的内容一起正常使用。
如果我们可以使回调的签名看起来像是他们可能始终可以使用的标准功能,那么如果他们实际上没有记录器,则可以为他们提供一个简单的默认选项。
此外,调用者可能多次从库中获取实例组件,并且对于资源争用或者线程问题,希望为每个组件提供不同的记录器回调。