0

好吧,我正在尝试实现命令模式来创建与对象的交互。

几乎所有将创建的命令都包括对对象的请求和来自该对象的响应。

所以问题是 - 如何管理这些响应?

当所有命令都无效时,它很容易制作。不管它们是什么,如果它们实现了@executable@接口,你就可以执行它们,所以有

无效执行(对象参数)

但是,当他们的反应有不同类型时该怎么办?也许命令模式不适合这个项目?

4

3 回答 3

0
ICommandResponse Execute(object params)

您可以返回一个带有 ResponseType 属性的接口,该属性为您提供有关具体响应类型的信息。

于 2013-11-06T06:53:54.493 回答
0

利用 .NET 的内置命令模式类型和 lambda。

首先,您不需要自己的命令模式接口。使用Action<T>. 因此,例如,任何调用的命令都必须具有以下签名:

void Command(object params)

然后,对于任何不属于这种形式的命令,为其提供一个 lambda shim,例如:

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

上面的 lambda 然后符合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 回答