在.NET中实现具有可替换后端实现的API(F#)

Tri*_*tan 3 .net f# design-patterns

我试图了解如何在.NET世界中实现可替换组件或服务提供者接口.我怀疑我只是不知道要搜索的适当术语.

具体来说,我正在玩一个Matrix有不同后端的课程.最简单的是,矩阵提供了两个参数的get和set方法以及一个构造函数.实施对最终用户来说并不重要.例如,取决于矩阵大小,矩阵可以由内存数组,文件或分布式键值存储支持.我想隐藏后端实现并允许第三方提供新的后端实现.

一个理想的API,从IronPython调用,可能是这样的

a = matrix(data = 0, rows = 1000, cols = 10, backend = 'file://test.txt')
a[100, 2] = 1
print a[100, 2]
Run Code Online (Sandbox Code Playgroud)

我应该阅读什么来理解这类问题的模式?

我在F#和IronPython中玩游戏,但不相信这个问题特定于任何特定的.Net语言.

Str*_*ger 6

是的,您可以创建一个接口IMatrix和一个实现它的具体类,如下所示:

type IMatrix =
    abstract Item : (int * int) -> single with get, set

type ConcreteMatrix (data:single[,])=
    interface IMatrix with
        member t.Item with get((x,y)) = data.[x,y]
                      and set((x,y)) value = do data.[x,y] <- value

let printCoordinate (x, y) (matrix : #IMatrix) =
    printf "%A" matrix.[x, y]
Run Code Online (Sandbox Code Playgroud)