【问题标题】:Serialize a call to a function序列化对函数的调用
【发布时间】:2011-12-08 21:02:54
【问题描述】:

我需要在我的应用程序中实现任务的概念。 在我的项目中,任务是必须执行的操作,并由名称标识:每个任务还​​具有输入参数(类型和值)并产生一个或多个输出。

必须实现Task类,如何表达“有某种结果的操作”的概念?我可以将操作的名称存储在字符串属性中,但是如何表示此操作返回的类型呢? 同理,当这些参数也可能是不同的类型时,如何实现操作的输入参数列表?

目标是序列化Task对象并将其发送到另一个节点。接收端解析接收到的Task对象,读取操作的名称,执行对应的函数。

例如,假设节点 A 和节点 B “拥有”以下方法...

节点A的服务:

- double getAreaOfRectangle(double length, double width);
- double getAreaOfTriangle(double base, double height);
- double getAreaOfParallelogram(double base, double height).

节点B的服务:

- double getAreaOfCircle(double radius);
- double getAreaOfTrapezoid(double base1, double base2, double height).

如果节点C需要计算一个矩形的面积,它知道它必须联系节点A并通过指定操作(double areaOfRectangle)和输入(双 width 和双 height)。 同样,如果节点C需要计算一个圆的面积,它必须向节点B发送消息,指定操作和半径的长度。 为了发送输入,因为它们可能是不同的类型(甚至是新的用户定义类型),我可以使用对象数组...

某些任务可能依赖于其他任务,即输入参数可能至少有另一个任务的一个输出,因此我还需要实现一个任务的输出和另一个任务的输入之间的链接。

我应该如何继续定义类?

【问题讨论】:

  • 我相信这类似于命令模式。
  • 为了记录,您描述的是远程过程调用。
  • 这描述了一个委托。委托声明描述了输入参数。它的 BeginInvoke() 方法在工作线程上运行委托目标方法。 EndInvoke() 方法提供结果。否则被 Task 类巧妙地包装。
  • 我也想过命令模式,现在我正在使用这种模式。但是我想知道.NET 是否有一些最佳机制来实现相同的目标。相反,关于代表,我会介绍如何使用它们,看看它们是否适合我的目的......我在我的问题中添加了一个示例!
  • 也许这篇文章 (link) 可能有助于解决我的问题...

标签: c# wcf command-pattern


【解决方案1】:

您应该考虑在 .NET 4.0 中使用表达式树。有关更多信息,请参阅本文

Serializing and Deserializing Expression Trees in C#

【讨论】:

  • 我将通过阅读文章来研究 .NET 4.0 中的表达式树。谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-08-12
  • 2013-06-05
  • 1970-01-01
  • 1970-01-01
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多