DRY编程困境

时间:2010-05-03 09:44:04

标签: design-patterns

情况是这样的:

我创建一个可以写入文件的Logger类,但是write_to_file()函数作为静态函数在辅助类中。

我可以调用该函数,但Log类将依赖于辅助类。

不是依赖性不好吗?

但如果我可以让它使用辅助函数那么有什么帮助函数呢?

应该优先考虑的是:使用辅助函数并且必须在任何地方都包含这个辅助类(但其他99种方法都不会有用)或者只是复制并粘贴到Log类中(但是如果我已经完成了100次这样的操作,那么然后做出改变我必须在100个地方改变。)

分享您的想法和经验!

4 个答案:

答案 0 :(得分:2)

我认为你让事情变得更加复杂。

如果有2个或更多类需要该函数(现在在helper类中),那么让它在那里,它没有问题。

如果目前只有记录器使用此功能,则将其移至记录器类。如果其他课程需要,你可以随时将其移回。

  

有辅助功能有什么意义?

如果你有一个可以被许多不同类使用(并且肯定会被使用)的函数,并且这个函数不依赖于调用者状态,那么它可以是辅助函数。像数学运算(sqrt等)或不同的格式化程序。

答案 1 :(得分:2)

这还取决于您希望记录器类的灵活性。如果您认为可能稍后您想将日志输出写入网络而不是文件,那么抽象将日志条目写入接口(例如LogEntrySink)的过程可能是明智的。然后,您可以将不同的接收器注入记录器(例如FileWriterSink)。这使您能够让一个记录器使用不同的输出方法,而不会在以后更改任何代码。

答案 2 :(得分:2)

依赖性本身并不差;他们只需要得到有效管理。听起来你可能有一个辅助类,它有多个责任(100种方法对我来说似乎很多),所以也许这个辅助类需要拆分成多个类。

另一种选择是创建一个IFileWriter接口,它具有您需要的一个辅助方法。然后,让helper类实现该接口,并使记录器依赖于接口而不是具体的helper类。这样,如果您有时间重构帮助程序类,则记录程序不必更改。

答案 3 :(得分:1)

您的日志记录类应完全独立,原因如下:

  • 重用目的。
  • 以确保日志记录代码中的错误不会影响系统的任何其他部分。
  • 系统其他部分的错误不会显示为日志记录错误。

你想要的最后一件事是最后两点的情景。因此,如果您有一个日志到文件记录器,我建议您不要依赖于记录器类中应用程序代码中任何与文件相关的类。