好吧,我正在尝试实现命令模式来创建与对象的交互。
几乎所有要创建的命令都包含对对象的请求和该对象的响应。
所以问题是 - 如何管理这些回复?
当所有命令都无效时,它很容易制作。无论它们是什么,如果它们实现@ executable @ interface,你都可以执行它们,所以有
void执行(对象参数)
但是当他们的回答有不同的类型时该怎么办?也许命令模式不适合这个项目?
答案 0 :(得分:0)
ICommandResponse Execute(object params)
您可以返回具有ResponseType属性的接口,该属性为您提供有关具体响应类型的信息。
答案 1 :(得分:0)
使用.NET的内置命令模式类型和lambdas。
首先,你不需要自己的命令patetrn接口。使用Action<T>
。因此,例如,任何被调用的命令必须具有以下签名:
void Command(object params)
然后,对于任何不是这种形式的命令,为它提供一个lambda垫片,例如:
() => { SomeCommandThatTakesTwoParamsAndRetrunsInt(parms.part1, params.part2); }
上面的lambda符合void Command(object params)
要求。
答案 2 :(得分: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...
}
}