Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Azure/AWS ORM设计指南_C#_.net_Amazon Web Services_Azure Storage_Design Guidelines - Fatal编程技术网

C# Azure/AWS ORM设计指南

C# Azure/AWS ORM设计指南,c#,.net,amazon-web-services,azure-storage,design-guidelines,C#,.net,Amazon Web Services,Azure Storage,Design Guidelines,我正在设计和实现.Net ORM,它必须同时支持Azure存储(表、队列、Blob)和AWS存储(EBS、SimpleDB、S3),并将所有实现细节隐藏在一个公共接口后面。主要的设计目标是简单 一些工作已经在中完成,但在我看来,他们提出的接口与Azure/AWS存储接口的耦合过于紧密,如果添加新功能或更改旧功能,可能会中断。例如,我不在乎是否可以创建/删除表,我只需要以最有效的方式存储某种类型的对象 所以,我想请你以一种指南的形式分享你在这个问题上的经验(做,考虑,避免,不做)。我非常感谢从设计

我正在设计和实现.Net ORM,它必须同时支持Azure存储(表、队列、Blob)和AWS存储(EBS、SimpleDB、S3),并将所有实现细节隐藏在一个公共接口后面。主要的设计目标是简单

一些工作已经在中完成,但在我看来,他们提出的接口与Azure/AWS存储接口的耦合过于紧密,如果添加新功能或更改旧功能,可能会中断。例如,我不在乎是否可以创建/删除表,我只需要以最有效的方式存储某种类型的对象


所以,我想请你以一种指南的形式分享你在这个问题上的经验(做,考虑,避免,不做)。我非常感谢从设计ORM的一般原则开始,以更可能持续考虑Azure和AWS最可能的发展路径的精确抽象级别结束的任何见解。

如果您真的想避免紧密耦合,我建议您只需在其上实现抽象层两种存储类型上可用的最小功能集

但不管怎样,你想做的对我来说没有意义。云(非关系)存储非常奇特,因此尝试构建通用ORM将是一个巨大的失败。现代的SQLORM是“好的”,因为RDBMS都有一组共享的最小特性,这些特性实际上相当广泛,在大多数情况下,您不需要外来的东西。对于云存储,每个实现几乎都是独一无二的,因为首先要记住的是可伸缩性。例如,如果您在Azure中丢弃Blob租约,因为在Amazon中它们不存在(我不知道,我只是举个例子),那么您可能很难在Amazon和Azure中管理Blob并发访问,这是没有意义的


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

“更可能持续考虑Azure和AWS最可能的发展路径”–怎么可能有人知道呢?没错,我们不能确定。最好的猜测就足够了。这对我来说真的很有意义。我构建这个API是为了解决中第2节所述的障碍/浪涌计算机会中的数据锁定问题。那么,我是否正确理解你的建议:1。忘记构建通用ORM吧,因为它有99%的失败概率。2.为Azure和AWS实现两个不同的API,并使用每个API的完整功能集?是的,这就是我的意思。隔离接口后面的高级功能并实现两个版本,每个版本使用每个平台的所有可用功能。如果您只能针对2种存储类型,那么构建一个成熟的ORM可能是过火了。