如何编写实验框架
本文关键字:框架 实验 何编写 | 更新日期: 2023-09-27 18:02:13
我是一个中级c#/ASP.net编码员,在一个有趣的MVC项目上工作。我想实现一个实验框架,允许对象"抖动"功能,以便找到更好的做事方式。我在哪里可以读到更多关于这类事情的最佳实践或教程?
如
// 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) { ... }
...
}
非常感谢!
你所描述的听起来像是一种策略模式;例如,你可以有一个接口IMean,一个方法Calculate,和3个实现。
我使用我自己的实验框架,具有以下属性:
- 实验为一级实体
- 只要有正在进行的实验,应用程序就会运行
- 每个实验确定何时收集到足够的数据
- 记录存储在数据库
正在进行实验的应用程序公开了命名属性,供实验框架操作和监视。主要的应用程序方法是一个事件生成器。每个实验都列出了要操作的属性和要监控的其他属性。实验框架通过主要的应用方法进行迭代,将事件提供给正在进行的实验。每个实验过滤它接收到的事件,更新方差统计并操作其相关的应用程序属性。当实验发出信号表示它已经处理了一个事件时,该事件以及它操纵和监视的属性值将存储在实验数据库中。
通过检验或使用Sho或r对实验数据库进行分析。实验结果可用于研究单个属性值的影响,以及不同应用属性之间的相关性和独立性。
我选择使用生成器模式,而不是信号或控制反转,因为实验框架应该负责应用程序何时运行和停止。编译器根据yield
命令在主应用程序方法中完成创建状态机的所有艰苦工作。
我仍在完善框架并重新思考其中的部分内容。我打算在将来的某个时候把它变成一个开源项目。
Google的"重叠实验基础设施"论文是关于这个主题的优秀读物。
我想你所说的"抖动功能"是指根据配置替换不同的功能,这样你就可以进行实验了。
如果是这种情况,那么您应该研究多态性(很可能通过接口),也许您还需要与控制反转相关的框架和设计模式。