2009-08-21 130 views
12

我正在处理的应用程序需要将操作,执行操作的用户以及操作时间记录到数据库。当需要记录时,您会考虑哪种设计模式?

哪种设计模式最受欢迎/适合于日志记录?

我正在考虑命令模式需要当前用户和一个操作。执行操作并写入日志。

您认为如何?我可以考虑的其他选择吗?

谢谢。

回答

10

您可以使用AOP来应用没有任何侵入行为的日志记录。 AOP可能感觉像是代理和装饰模式的混合体。

+0

是的,AOP绝对是一种选择。谢谢你提醒我。 – Henry 2009-08-21 22:20:30

+0

......没有任何侵入行为的话......对我而言很突出。应该在后台发生,并且您的应用程序不应该依赖于“何时”写入日志。 – Mukus 2013-04-17 07:22:02

2

我同意,我认为命令模式最适合,因为你会列出所有的动作。

但我不认为你真的需要遵循这一个设计特定的模式。你可以简单地设置回调更新日志的操作。这取决于你的架构和技术,但是在我的脑海里,命令模式听起来像是矫枉过正。

+0

谢谢,我想过使用简单的回调函数,但似乎很难从应用程序中获取“用户”,除非每个操作都以User作为参数。 – Henry 2009-08-21 18:12:22

1

命令模式听起来很好。它特别使您能够将记录器传递给命令,并让该命令在记录器上执行日志操作。通过这种方式,您可以让每个操作都关注日志本身的格式,并且如果某些操作不应该被记录或者需要特殊信息,那么整体架构不需要知道这些信息。 如果您想避免这种情况,您可以为每个操作提供一个返回应该添加的日志字符串的方法,但缺点是操作与记录器耦合。

如果您将有很多不同的操作,我不认为这太过矫枉过正,如果那只是数据库操作,并且您可以让数据库框架在每个数据库操作中执行操作,它可能会重新创建轮一种记录机制,但marcgg指出这取决于你的架构。

4

请勿混淆命令和日志记录备忘录

命令是完成的东西。其中可能包括所有命令的一些常见方面,包括编写日志条目。

日志条目本身可以是纪念品纪念品的摘要。

该记录器是一种工厂,它创建纪念品记录事件。

与大多数情况一样,您有大量的互锁设计模式。哪一种“最流行/最合适”的模式不会被纳入。

问题是“应该发生什么?”

+5

仅供参考:“纪念图案是一种软件设计模式,可将对象恢复到之前的状态”http://en.wikipedia.org/wiki/Memento_pattern – marcgg 2009-08-21 18:49:30

4

Observer Pattern非常适合日志记录框架。 您可以让Logger类扩展Observable,以及像日志到控制台的子类,登录到数据库并登录到文件系统等,每个子类实现Observer。 现在每当记录日志消息时,所有向Logger类注册的观察者类都将被通知,以便每个Child类ex:log到控制台都会将消息记录到控制台。 此外,Logger类可以遵循Singleton模式,以确保Logger的单个实例在整个应用程序中可用。

+0

几年前,我在这种情况下使用了这种模式...日志仍然很好。 – 2015-07-16 19:33:19