Azure/AWS ORM设计指南

and*_*iys 6 .net c# design-guidelines amazon-web-services azure-storage

我正在设计和实现必须支持Azure存储(表,队列,blob)和AWS存储(EBS,SimpleDB,S3)的.Net ORM,并隐藏通用接口背后的所有实现细节.主要设计目标是简单性.

一些工作已在http://www.cs.virginia.edu/~humphrey/papers/CSAL.pdf中完成,但在我看来,他们建议的界面与Azure/AWS Storage界面紧密耦合,并且如果添加新功能或更改旧功能,可能会中断.例如,我不在乎我可以创建/删除表,我只需要以最有效的方式存储某种类型的对象.

所以,我想问问大家分享的准则表格关于这个问题的经验(DO,考虑,避免不).我真的很感激任何洞察力从设计ORM的一般原则开始,并以精确的抽象级别结束,这更有可能持续考虑Azure和AWS最可能的演进路径.

Dar*_*era 1

如果您确实想避免紧密耦合,我建议您简单地在两种类型的存储上可用的最小功能集之上实现抽象层。

但无论如何,你想做的事情对我来说并没有什么意义。云(非关系)存储是如此奇特,以至于尝试构建通用的 ORM 将是一个巨大的失败。现代 SQL ORM 是“好”的,因为 RDBMS 都具有共享的最小功能集,这些功能实际上非常庞大,并且在大多数情况下您不需要外来的东西。对于云存储,每个实现几乎都是独一无二的,正是因为首先要记住的方面是可扩展性。例如,如果您在 Azure 中丢弃 Blob 租约,因为在 Amazon 中它们不存在(我不知道,我只是举个例子),那么您可能会很难管理 Amazon 中的 Blob 并发访问,并且在 Azure 中也是如此,这是没有意义的。

我宁愿尝试实现一个设计合理的数据访问层,以避免出现问题,但利用两个平台中的所有可用功能(如果需要,可以使用非常不同的实现)。