2013-02-12 8 views
8

私が作業しているAPIのエラーマネージャを作成しています。 APIから返されるエラーコードの単一のストアを提供し、異なる呼び出しで同じエラーが同じ方法で処理されるようにします(要求から欠落した値など)。しかし、これはどこでも、私はエラーを設定するエラーコードのクラスへの依存を作成依存関係を作成せずにマジックナンバーを避ける

$this->_errorManager->setError(ErrorCodes::REQUIRED_FIELD); 

私の最初のアプローチは、の線に沿っていました。

$this->_errorManager->setError(100); 

しかし、今、私は何を意味する私のコードの真ん中に座って数を持っている:

選択肢があります。

私はこの特定の問題の解決策を考えることができますが、私は 'enum'を使いたいと思う他の状況があります。クラスを密接に結合しない解決策は考えられません。

マジックナンバーを削除するには、これを行う方法と別の方法がありますか?それとも、私が受け入れてケースバイケースで検討しなければならないものがタイトなカップリングですか?

+3

"ErrorCodes"に*動作*がないので、私は実際にこの "カップリング"を呼びません。それは良い習慣であり、間違いなくその言葉の否定的な意味合いに値するものではありません。 「2つの論理エンティティを結合したもの」ではなく、「2つの物理クラスとして実装された1つの論理エンティティ」と考えることができます。 – Jon

答えて

4

これは望ましいカップリングです。アプリケーションとエラーマネージャを疎結合させることをお勧めしますが、アプリケーションとそのエラーコードを分離する理由はありません。はともにに属します。

依存性:

+-----------------------+ 
|Application error codes|<------------+ 
+-----------------------+    | 
     ^      | 
      |       | 
+----------+----------+    | 
|Application component|    | 
+----------+----------+    | 
      |       | 
      v       | 
+-----------------------+  +-------+-----+ 
|Error handler interface|<|---+Error handler| 
+-----------------------+  +-------------+ 
+0

私はあなたと一緒です... +1 – hek2mgl

1

あなたが "プリプロセッサ" マクロとメイクファイルでこれらのハードルの一部をクリアすることができます。プリプロセッサマクロは、m4の礼儀です。

このようなエラーコードのファイルを管理しているとします。

define(`ERR_REQUIRED_FIELD',`100')dnl 

次に、英語のエラー "constant"でPHPコードを書くことができます。

$this->_errorManager->setError(ERR_REQUIRED_FIELD); 

そして、これらの2つのファイルをm4を通して実行する行をmakefileに含めます。それを管理する方法は複数あります。 (簡潔にするために、私はメイクを省略していて、ちょうどM4を通じて私のテストファイルを実行している。)

$ m4 test.php.m4 > test.php 
$ cat test.php 
$this->_errorManager->setError(100); 

このは、依存関係を導入ありません。 phpファイルはすべてエラーコードのファイルに依存します。しかし、メイクファイルで簡単に管理できるのは些細な依存関係です。実際には、私はおそらくこのようなエラーコードのファイルを構築するだろう。 。 。あなたのerrorCodeモジュールの定義を構築するのm4マクロ定義を構築、または

    • のいずれかに

      ERR_DISK_FULL 
      ERR_REQUIRED_FIELD 
      ERR_MISSING_ARG 
      

      とテキストユーティリティを使用してmake

    数値は行番号と同じです。これにより重複したエラーコードが発生することはありません。

  • 関連する問題