2

こんにちは、さまざまなデータ セットに対して同様の手順/アクション (わずかに異なる) を実行する必要があるという問題があります (データは構造に関してもわずかに異なる場合があります)。実行する必要があるいくつかの手順があります。接続、検証、必要に応じてエラーメッセージを作成し、データの構造を設定された形式に変更して結果を出力します。

私はこれに非常にうまく適合するように見えるテンプレート メソッド パターンを見ていました。

新しいデータ セットを簡単にシステムに追加でき、システムに大きな影響を与えずにエラー レポートを変更できるような設計を目指しています。

私はphpを使用しています。

4

2 に答える 2

1

ここではテンプレート メソッドが非常に良さそうに思えますが、 テンプレート メソッドをいつ使用するかについても検討してください。ストラテジー?

于 2010-07-17T18:30:15.707 に答える
1

戦略メソッドは、テンプレート メソッドとうまく連携します。

テンプレート メソッドは、クラスの要件を指定します。戦略メソッドを使用すると、オブジェクトを使用して動作を定義し、依存性注入を使用して実行時にそれらを定義できます。

class CRUDTemplate
{
    protected $updater;
    protected $creator;
    protected $deletor;
    protected $loader;

    public function __construct(IUpdate $updater, ICreator $creator, IDeletor $delete, ILoader $loader)
    {
          $this->updater = $updater;
          //...snipped...
    }

    // sample template function; others are create, delete, update 
    public function load($id)
    {
          $this->content = $this->loader->load($id);
    }
}

サンプル コードは各戦略を呼び出すテンプレート関数を示しているだけですが、入力の検証、初期化など、テンプレート関数の特殊なオーバーロード バージョンでさらに多くのことを実行できます。そして結局のところ、何かが戦略を呼び出す必要があります。

長所は、上記の例の場合、さまざまな条件に対してさまざまな戦略セットを使用できることです (ここでは CRUD が最適な例ではない可能性があります)。したがって、データの出力方法を変更したいが、データの保存/作成/ロード方法は保持したい場合は、出力戦略を変更するだけで済みます。

短所は、渡された戦略が有効であることを確認するための型チェックがないため、戦略が正しいコンテキストであることを確認する必要があることです (予想される基本クラスである限り、どれも機能します)。そうそう、CRUDTemplate も基本クラスから派生させることができます。

データの場合、PHP では、配列が複雑なパラメーターを渡すのに最適であることがわかりました。もちろん、配列の検証を行う必要があります

于 2010-07-17T18:50:58.240 に答える