我应该使用一门还是以上?

时间:2011-02-24 17:13:31

标签: oop heuristics

在我的PHP Web应用程序中,我希望能够执行以下日志记录操作:

  1. 将数据库记录写入'error_log'表。
  2. 将数据库记录写入'history_log'表。
  3. 通过FirePHP将所有查询记录到Firebug控制台。
  4. 使用FirePHP将任意数据记录到Firebug控制台。
  5. 我正在努力决定更好的架构。我有两个想法。哪一个更好?我也向其他人开放。

    设计#1

    • 抽象类Logger
      • 类FirebugConsoleLogger
        • 的getInstance()
        • 日志(字符串)
      • class DatabaseLogger
        • 的getInstance()
        • logError(logTypeId,affiliateId,detailsArray)
        • logHistory(logTypeId,affiliateId,detailsArray)

    设计#2

    • class Logger
    • 的getInstance()
    • logToFirebugConsole(字符串)
    • LOGERROR(字符串)
    • logHistory(字符串)

    编辑以下是我可能会选择的内容。

    • 类FirebugConsoleLogger
      • public getInstance()
      • 公共日志(字符串)
    • 抽象类Logger
      • 抽象公共日志(typeId,affiliateId,details)
      • 类ErrorLogger
        • public getInstance()
        • 公共日志(typeId,affiliateId,details)
      • 类HistoryLogger
        • public getInstance()
        • 公共日志(typeId,affiliateId,details)

1 个答案:

答案 0 :(得分:2)

我不会用。我将使用为每个实现实现相同日志方法的设计。所以它看起来像设计#1,但有点不同。

  • 抽象类Logger
    • 日志(字符串)

为您拥有的每种类型的日志创建后代并覆盖日志方法。

然后,为特定目的创建工厂,所以:

  • 类QueryLoggerFactory
    • getInstance()//返回/ FireBugConsoleLogger实例
  • 类ErrorLoggerFactory
    • getInstance()//返回数据库记录器实例
  • 类HistoryLoggerFactory
    • getInstance()//返回相同或不同的数据库记录器实例

这样,当您需要记录查询时,只需调用

即可
QueryLoggerFactory->getInstance()->log($query);

在您的应用程序中,您无需调用特定方法。如果您决定要将查询存储在数据库中,则只需在工厂中实例化一个不同的记录器。您甚至可以实例化将自身记录到其他两个记录器的记录器,这样您就可以在数据库中的FireBug 中存储错误。或者,您可以实例化一个不记录任何内容的void记录器。