我应该使用一类还是更多类?
在我的 PHP Web 应用程序中,我希望能够执行以下日志记录操作:
- 将数据库记录写入“error_log”表。
- 将数据库记录写入“history_log”表。
- 通过 FirePHP 将所有查询记录到 Firebug 控制台。
- 使用 FirePHP 将任意数据记录到 Firebug 控制台。
我正在尝试决定更好的架构。我心里有两个。其中哪一个更好?我也对其他人持开放态度。
设计 #1
- 抽象类 Logger
- FirebugConsoleLogger 类
- getInstance()
- 日志(字符串)
- 数据库记录器类
- getInstance()
- logError(logTypeId、affiliateId、detailsArray)
- logHistory(logTypeId、affiliateId、detailsArray)
- FirebugConsoleLogger 类
设计#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:
- Write a database record to an 'error_log' table.
- Write a database record to a 'history_log' table.
- Log all queries to the Firebug console via FirePHP.
- 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)
- class FirebugConsoleLogger
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我都不会用。我将使用一种为每个实现实现相同日志方法的设计。所以它看起来像设计#1,但有点不同。
为您拥有的每种日志类型创建后代并覆盖 log 方法。
然后,创建一个用于特定目的的工厂,因此:
这样,当您需要记录查询时,您只需调用
而在应用程序中无需调用特定方法。如果您决定也希望将查询存储在数据库中,则只需在工厂中实例化一个不同的记录器即可。您甚至可以实例化一个记录器,将其自身记录到另外两个记录器,这样您就可以将 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.
Create descendants for each type of log you have and override the log method.
Then, create a factory for specific purposes, so:
That way, when you need to log a query, you just call
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.