0

さて、オブジェクトとの相互作用を作成するコマンド パターンを実装しようとしています。

作成されるほとんどすべてのコマンドは、オブジェクトへの要求とそのオブジェクトからの応答で構成されます。

問題は、この応答をどのように管理するかということです。

すべてのコマンドが無効な場合、簡単に作成できます。それらが何であれ、 @executable@ インターフェイスを実装していれば実行できます。

void Execute(オブジェクト パラメータ)

しかし、応答の種類が異なる場合はどうすればよいでしょうか。コマンド パターンがこのプロジェクトに適していない可能性があります。

4

3 に答える 3

0

.NET の組み込みコマンド パターン タイプとラムダを利用します。

まず第一に、独自のコマンド patetrn インターフェイスは必要ありません。を使用しAction<T>ます。したがって、たとえば、呼び出されるコマンドは次のシグネチャである必要があります。

void Command(object params)

次に、この形式ではないコマンドについては、ラムダ shim を指定します。たとえば、次のようになります。

() => { SomeCommandThatTakesTwoParamsAndRetrunsInt(parms.part1, params.part2); }

上記のラムダは、void Command(object params)要件に準拠しています。

于 2013-11-06T07:10:34.917 に答える
0

コマンドの実行結果がイベントになる場合があります。

例:

class ChangeNameCommand
{
    int _id;
    string _name;
    IRepository _repository;
    IEventPublisher _publisher;

    public ChangeNameCommand(int id, string name, IRepository repository, IEventPublisher publisher)
    {
        _id = id;
        _name = name;
        _repository = repository;
        _publisher = publisher;
    }

    public void Execute()
    {
        User user = _repository.Get(_id)
        user.Name = _name;
        _repository.Save(user);

        NameChangedEvent e = new NameChangedEvent();
        _publisher.Publish(e);
    }
}

class UserNameChanged : IHandler<NameChangedEvent>
{
    public void Handle(NameChangedEvent e)
    {
        //TODO...
    }
}
于 2013-11-06T07:27:48.727 に答える
0
ICommandResponse Execute(object params)

具体的な応答タイプに関する情報を提供する ResponseType プロパティを持つインターフェイスを返すことができます。

于 2013-11-06T06:53:54.493 に答える