【问题标题】:wcf - multiple KnowType commands - proper pattern for executionwcf - 多个 KnowType 命令 - 正确的执行模式
【发布时间】:2017-11-04 17:29:33
【问题描述】:

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

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

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

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 分支看起来有点吓人,我想重构它。 我正在考虑这样的事情: AbstractCommand 应该定义并且 ConcreteCommand 应该实现一个方法 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 分支,并且可以这样做:

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

看起来不错。这种方法的唯一缺点是现在 ConcreteCommand 类而不只是 DTO(par1,par2...)需要在其中定义逻辑(Execute 方法)并且应该注意 IRepository

有人可以提出更好的方法吗?

【问题讨论】:

标签: c# wcf design-patterns


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2010-11-23
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 2020-05-27
    • 2021-12-04
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多