【发布时间】:2019-02-15 16:31:25
【问题描述】:
我正在用 C# 开发一个应用程序,它基本上是一个接口,可以通过(很可能)一个 REST API 向各种外部应用程序/客户端获取或返回数据。应用程序的设计应该足够灵活,以便后端数据存储可以通过仅更改配置文件以指向新的数据存储或可能循环通过可用数据存储以在不同格式的数据存储上查找数据来交换。数据的整体结构大致是一个文件系统/树,其中一些节点附加了自定义数据,用于搜索、权限等。
例如,我们可能在 SQL 数据库中拥有实时生产数据,但有可能一些旧数据会存储在网络共享上的扁平化 csv 文件中,并且希望接口的新实现包括在未来(这些的数据库实现已经被定义,这意味着如果某些东西有一个 GUID 类型的 pkid,我们不能改变它。)
我在计划中遇到的问题是这些后端数据格式具有不同的唯一 ID...等等。所以接口可能有一个方法:
public long CreateFolder(long parent, string folderName);
这对于使用整数或长 Id 的东西来说可以正常工作,但是如果 CreateFolder 操作的返回是 guid 或文件名(字符串),则接口实现的使用者会遇到问题。还希望尽可能少地更改“业务逻辑”层并在最低级别的数据层进行更改。
我的第一个想法是创建所有返回字符串的接口,并让数据层实现处理将字符串转换为本机数据类型,但这对我来说似乎很难看。
有类似的指导吗?
编辑:添加这是我用于数据库接口的模式。
现在我倾向于使用 string、int 和 long 重载所有接口,然后在接口实现中处理转换/转换。
【问题讨论】:
-
interface foo { T3 CreateFolder<T1, T2, T3>(T1 parent, T2 folder); } -
这并没有让我更接近,我应该提到后端数据存储之一使用强类型的 WSDL 接口。所以它不是纯粹的查询代码。所以现在我会有这样的代码:
parent = long.Parse(parent.ToString())