如何编写实验框架

时间:2011-07-14 21:33:03

标签: c# asp.net

我是一名中级C#/ ASP.net编程员,致力于一个有趣的MVC项目。我想实现一个实验框架,它允许对象“摇摆”功能,以便找到更好的做事方式。我在哪里可以阅读更多有关此类事情的最佳实践或教程?

e.g

// A helper class that might return different flavors of "mean".
public class MeanHelper
{
  ...
  Mean(IEnumerable<double> input) { <shuffle between the 3 below.> }

  OrdinaryMean(IEnumerable<double> input) { ... }
  GeometricMean(IEnumerable<double> input) { ... }
  HarmonicMean(IEnumerable<double> input) { ... }
  ...
}

非常感谢!

3 个答案:

答案 0 :(得分:4)

你描述的内容听起来像strategy pattern;例如,您可以使用IMean接口,使用方法Calculate和3个实现。

答案 1 :(得分:3)

我使用自己的实验框架,具有以下属性:

  • 实验是一流的实体
  • 只要正在进行实验,应用程序就会运行
  • 每个实验确定何时收集了足够的数据
  • 记录存储在数据库中

正在进行实验的应用程序公开了实验框架的命名属性以进行操作和监视。主要的应用方法是事件生成器。每个实验都列出了要操作的属性和要监视的其他属性。实验框架迭代主要的应用方法,将事件提供给正在进行的实验。每个实验都会过滤收到的事件,更新差异统计信息并操纵其关联的应用程序属性。当实验发出信号表明它已经处理了一个事件时,事件以及它操作和监视的属性值都存储在实验数据库中。

通过检查或ShoR分析实验数据库。实验结果可用于研究各个属性值的影响,以及不同应用属性的相关性和独立性。

我选择使用生成器模式,而不是信号或控制反转,因为实验框架应该在应用程序运行和停止时负责。编译器根据yield命令在主应用程序方法中完成创建状态机的所有艰苦工作。

我仍然在改进框架并重新思考它的一部分。我打算在未来的某个时候把它变成一个开源项目。

Google的"Overlapping Experiment Infrastructure"论文是关于此主题的精彩读物。

答案 2 :(得分:0)

我认为“微动功能”是指根据配置替换不同功能,以便您可以进行实验。

如果是这种情况,那么你应该研究多态(很可能是通过接口),也许你也会考虑与inversion of control相关的框架和设计模式。