1

私の PHP Web アプリケーションでは、次のログ操作を実行できるようにしたいと考えています。

  1. データベース レコードを「error_log」テーブルに書き込みます。
  2. データベース レコードを「history_log」テーブルに書き込みます。
  3. FirePHP を介してすべてのクエリを Firebug コンソールに記録します。
  4. FirePHP を使用して任意のデータを Firebug コンソールに記録します。

私はより良いアーキテクチャを決定しようとしています。2つ考えています。これらのうち、どれがより良いものですか? 私は他の人にもオープンです。

デザイン #1

  • 抽象クラス ロガー
    • クラス FirebugConsoleLogger
      • getInstance()
      • ログ(文字列)
    • クラス DatabaseLogger
      • getInstance()
      • logError(logTypeId、affiliateId、detailsArray)
      • logHistory(logTypeId、affiliateId、detailsArray)

デザイン #2

  • クラス ロガー
  • getInstance()
  • logToFirebugConsole(文字列)
  • logError(文字列)
  • logHistory(文字列)

編集これは私がおそらく行くつもりです。

  • クラス FirebugConsoleLogger
    • パブリック getInstance()
    • 公開ログ(文字列)
  • 抽象クラス ロガー
    • 抽象公開ログ (typeId、affiliateId、詳細)
    • クラス ErrorLogger
      • パブリック getInstance()
      • 公開ログ (typeId、affiliateId、詳細)
    • クラス HistoryLogger
      • パブリック getInstance()
      • 公開ログ (typeId、affiliateId、詳細)
4

1 に答える 1

2

どちらも使用しません。実装ごとに同じログメソッドを実装する設計を使用します。つまり、デザイン#1のように見えますが、少し異なります。

  • 抽象クラスロガー
    • log(文字列)

使用しているログの種類ごとに子孫を作成し、logメソッドをオーバーライドします。

次に、特定の目的のためにファクトリを作成します。

  • クラスQueryLoggerFactory
    • getInstance()//FireBugConsoleLoggerインスタンスを返します
  • クラスErrorLoggerFactory
    • getInstance()//データベースロガーインスタンスを返します
  • クラスHistoryLoggerFactory
    • getInstance()//同じまたは異なるデータベースロガーインスタンスを返します

そうすれば、クエリをログに記録する必要があるときに、

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

また、アプリケーションのどこにも特定のメソッドを呼び出す必要はありません。クエリをデータベースにも保存する場合は、ファクトリで別のロガーをインスタンス化するだけです。他の2つのロガーに自分自身を記録するロガーをインスタンス化することもできるので、FireBugデータベースにエラーを保存できます。または、何もログに記録しないvoidロガーをインスタンス化することもできます。

于 2011-02-24T17:24:04.833 に答える