wcf - 多个KnowType命令 - 执行的正确模式

问题描述 投票:0回答:1

我有一个WCF服务用于执行客户端的一些命令。我有一个基类,AbstractCommand和一些定义具体命令的派生类。

WCF Web服务具有单个方法void Execute(AbstractCommand命令)。它可以通过[KnownType]属性接受具体命令(从AbstractCommand派生的类)。通过存储库对数据库执行命令。

为简化起见,假设命令在服务中执行,如下所示:

public void Excecute(AbstractCommand command) {
   // Concrete command 1
   var theCommand = command as ConcreteCommand1;
   if (theCommand != null) {
      var par1 = theCommand.Par1;
      var par2 = theCommand.Par2;
      ...
      _repository.DoSomething(par1, par2...);
      return;
   }
   // Concrete command 2
   var theCommand = command as ConcreteCommand2;
      ...

这个if-branching看起来有点可怕,我想重构它。我正在考虑这样的事情:AbstractCommand应该定义并且ConcreteCommands应该实现一个方法Execute,它将如下所示:

public class ConcreteCommand1 : AbstractCommand {
   public int Par1 { get; set; }
   public int Par2 { get; set; }
   ...

   public void Execure(IRepository repository) {
      repository.DoSomething(Par1, Par2...);

所以在服务中我不再需要那种令人讨厌的if-branching并且可以这样做:

public void Excecute(AbstractCommand command) {
   command.Execure(_repository);
}

看起来很好。这种方法的唯一缺点是现在ConcreteCommand类而不仅仅是DTO(par1,par2 ...)需要在它们中定义逻辑(Execute方法)并且应该知道IRepository。

任何人都可以提出更好的方法吗?

c# wcf design-patterns
1个回答
0
投票

最后,我按照上面描述的方式实现了解决方案 - 它非常灵活且可扩展。如果有任何改进建议 - 欢迎。

© www.soinside.com 2019 - 2024. All rights reserved.