我应该使用一类还是更多类?

发布于 2024-10-18 23:52:56 字数 1104 浏览 1 评论 0原文

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

  1. 将数据库记录写入“error_log”表。
  2. 将数据库记录写入“history_log”表。
  3. 通过 FirePHP 将所有查询记录到 Firebug 控制台。
  4. 使用 FirePHP 将任意数据记录到 Firebug 控制台。

我正在尝试决定更好的架构。我心里有两个。其中哪一个更好?我也对其他人持开放态度。

设计 #1

  • 抽象类 Logger
    • FirebugConsoleLogger 类
      • getInstance()
      • 日志(字符串)
    • 数据库记录器类
      • getInstance()
      • logError(logTypeId、affiliateId、detailsArray)
      • logHistory(logTypeId、affiliateId、detailsArray)

设计#2

  • 类Logger
  • getInstance()
  • logToFirebugConsole(string)
  • logError(string)
  • logHistory(string)

编辑 这就是我可能会选择的。

  • 类 FirebugConsoleLogger
    • 公共 getInstance()
    • 公共日志(字符串)
  • 抽象类 Logger
    • 抽象公共日志(typeId、affiliateId、详细信息)
    • 错误记录器类
      • 公共 getInstance()
      • 公共日志(typeId、affiliateId、详细信息)
    • 历史记录器类
      • 公共 getInstance()
      • 公共日志(typeId、affiliateId、详细信息)

In my PHP web application, I want to have the ability to perform the following logging operations:

  1. Write a database record to an 'error_log' table.
  2. Write a database record to a 'history_log' table.
  3. Log all queries to the Firebug console via FirePHP.
  4. Log any arbitrary data to the Firebug console using FirePHP.

I am trying to decide on the better achitecture. I have two in mind. Which of these is the better one? I'm open to others as well.

Design #1

  • abstract class Logger
    • class FirebugConsoleLogger
      • getInstance()
      • log(string)
    • class DatabaseLogger
      • getInstance()
      • logError(logTypeId, affiliateId, detailsArray)
      • logHistory(logTypeId, affiliateId, detailsArray)

Design #2

  • class Logger
  • getInstance()
  • logToFirebugConsole(string)
  • logError(string)
  • logHistory(string)

EDIT Here's what I'm probably going to go with.

  • class FirebugConsoleLogger
    • public getInstance()
    • public log(string)
  • abstract class Logger
    • abstract public log(typeId, affiliateId, details)
    • class ErrorLogger
      • public getInstance()
      • public log(typeId, affiliateId, details)
    • class HistoryLogger
      • public getInstance()
      • public log(typeId, affiliateId, details)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你曾走过我的故事 2024-10-25 23:52:56

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

  • 抽象类记录器
    • 日志(字符串)

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

然后,创建一个用于特定目的的工厂,因此:

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

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

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

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

I would use neither. I'd use a design that implements the same log method for each implementation. So it looks like Design #1, but a little different.

  • abstract class Logger
    • log(string)

Create descendants for each type of log you have and override the log method.

Then, create a factory for specific purposes, so:

  • class QueryLoggerFactory
    • getInstance() // Returns a/the FireBugConsoleLogger instance
  • class ErrorLoggerFactory
    • getInstance() // Returns a database logger instance
  • class HistoryLoggerFactory
    • getInstance() // Returns same or different database logger instance

That way, when you need to log a query, you just call

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

And nowhere in your application you need to call a specific method. If you decide you want to store the query in the database too, you just instantiate a different logger in your factory. You can even instantiate a logger that logs itself to two other loggers, so you can store errors in FireBug and in the database. Or you can instantiate a void logger that doesn't log anything.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文