处理灵活的命令请求

本文关键字:命令 请求 处理 | 更新日期: 2023-09-27 18:13:09

我有一个非常复杂的对象,我希望为其添加执行几个命令的功能。每个命令可能需要不同的数值参数;它们的数量(参数)必须是可变的,以便为非常不同的处理请求安排空间。我的解决方案如下:

public enum ProcessingMethod {NONE, THIS, THAT, ETC};    
public interface IProcessing
{
    void Process(ProcessingMethod ProcType, Double[] Parameters);
}  

这样对象就实现了接口:

  1. 能够通过第一个参数识别需要进行何种处理;
  2. 知道从数组长度传递了多少个参数;
  3. 只传递数值参数,可以简单地从double强制转换为handle整数,长,浮点。
  4. 封装处理考虑位置的参数所需的知识

这个设计看起来很简单,能够完成工作,但是看着它,我有一种强烈的感觉,这个设计是一个不灵活的程序推理的症状。我试着在Command的设计模式方面想得更好,但对我来说这似乎有点过头了。此外,它也不完全符合我的需要。

我的问题是:有一个简单的解决方案来满足这些要求,在一个更oo的设计?

处理灵活的命令请求

我看到你的方法有两个问题:

  1. 不能保证实现对象将具有每个ProcessingMethod的实现
  2. 无法匹配给定ProcessingMethod的参数数量

出于这两个原因,我将把各种"Process"方法拆分为它们自己的函数调用,以确保参数计数安全(第一个问题远不那么重要):

public interface IProcessing
{
    void ProcessNone();
    void ProcessThis(double x);
    void ProcessThat(double x, int y);
    ...
}

接口定义了一个契约,说明你的对象可以做什么,并提供编译时安全性,以确保实现者至少具有具有这些签名的函数。这是一种更安全的方法。

如果你真的想避免这种接口,你的实现似乎是合理的。