Asp.net mvc 如何设计我的应用程序以利用Azure,但防止被锁定?

Asp.net mvc 如何设计我的应用程序以利用Azure,但防止被锁定?,asp.net-mvc,design-patterns,azure,Asp.net Mvc,Design Patterns,Azure,我开始将几个应用程序迁移到Azure。看起来非常简单,我所要做的就是在我的解决方案中添加一个额外的Azure项目,并将其指向我的web项目 然而,让我担心的是,团队开始用Azure特定的功能污染我的应用程序,并依赖它。例如,文件上传到Azure存储、Azure缓存等。如果我们保持Azure,并且所有客户都乐于使用Azure,那么一切都会很好。如果我们发现客户对Azure不满意,我不想在删除Azure功能方面投入大量工作 只是想知道是否有人遇到过类似的问题。我想,理想情况下,我希望能够将项目正确发

我开始将几个应用程序迁移到Azure。看起来非常简单,我所要做的就是在我的解决方案中添加一个额外的Azure项目,并将其指向我的web项目

然而,让我担心的是,团队开始用Azure特定的功能污染我的应用程序,并依赖它。例如,文件上传到Azure存储、Azure缓存等。如果我们保持Azure,并且所有客户都乐于使用Azure,那么一切都会很好。如果我们发现客户对Azure不满意,我不想在删除Azure功能方面投入大量工作

只是想知道是否有人遇到过类似的问题。我想,理想情况下,我希望能够将项目正确发布到Azure,它使用Azure功能、Azure代码等,并且第二次发布只允许我将IIS与非Azure功能一起使用

我想我只需要小心正确使用接口和DI等文件上传与AzureFileUpload。对于来自Azure存储的CSS/脚本等资源,而不是本地资源,您会怎么做?我应该考虑使用Azure云驱动器来模拟标准NTFS环境吗


有什么建议/模式/实践吗?有人有过类似的经历吗?如何将项目和项目结构等分开?我想很多都只是标准设计。只是想知道其他人是如何避免锁定Azure的。

我会设计一个云接口(作为实际云/网络的抽象),您的应用程序可以使用该接口,以及该接口的Azure实现

然后,当需要时,您可以使用相同的界面进行其他云实现,您的应用程序可以使用这些云实现


在设计接口时,面临的挑战是只包含与各种云/网络相关的通用方法。因此,这将阻止应用程序直接使用任何Azure特定功能,但这正是目的。

我将设计一个应用程序可以使用的云接口(作为实际云/网络的抽象),以及该接口的Azure实现

然后,当需要时,您可以使用相同的界面进行其他云实现,您的应用程序可以使用这些云实现


在设计接口时,面临的挑战是只包含与各种云/网络相关的通用方法。因此,这将阻止您的应用程序直接使用任何Azure特定功能,但这正是目的所在。

如果您担心,您可以做以下几件事:

  • 坚持使用asp.net、ado.net、sql等核心技术,这些技术也存在于Azure之外
  • 抽象掉使用Azure特定服务的代码
  • 对于第一个,只需扫描代码,以确保运行时服务不包括Azure命名空间

    但是,要成为一个类似云的服务并获得它的好处,您应该考虑采用azure服务


    第二,您可以创建一个由接口抽象的云服务层。只有该层与azure特定的服务通信。如果您需要在azure之外工作,您只需要为该层提供一个插件。

    如果您担心,您可以做以下几件事:

  • 坚持使用asp.net、ado.net、sql等核心技术,这些技术也存在于Azure之外
  • 抽象掉使用Azure特定服务的代码
  • 对于第一个,只需扫描代码,以确保运行时服务不包括Azure命名空间

    但是,要成为一个类似云的服务并获得它的好处,您应该考虑采用azure服务


    第二,您可以创建一个由接口抽象的云服务层。只有该层与azure特定的服务通信。如果您需要在azure之外工作,您只需要该层的插件。

    如果您希望应用程序能够在IIS或azure上运行,并且这是您仅有的两个目标,我唯一的建议是不要过度抽象/接口。在web.config和WebRole.OnStart()中可以处理一些差异,例如将缓存用作会话提供程序或将诊断记录到表存储中

    它将帮助您创建接口,然后根据部署目标将这些接口注入配置中(我们使用的是web配置转换)。例如,在IIS中,您可能希望在单独的线程中发送电子邮件,而在Azure中,您可能需要使用工作者角色和队列。您可以为IIS设置一个web.config转换,为Azure设置一个不同的实现


    根据您拥有的文件数据量,您可以做的另一件事是将文件存储为数据库中的blob列。我相信有人会告诉我这对性能不好,而且在sql Server中使用GB的文件数据可能会很昂贵,这是有道理的。如果IIS/Azure的灵活性备受关注,则可能值得考虑

    如果您希望应用程序能够在IIS或Azure上运行,而这是您仅有的两个目标,我唯一的建议是不要过度抽象/接口。在web.config和WebRole.OnStart()中可以处理一些差异,例如将缓存用作会话提供程序或将诊断记录到表存储中

    它将帮助您创建接口,然后根据部署目标将这些接口注入配置中(我们使用的是web配置转换)。例如,在IIS中,您可能希望在单独的线程中发送电子邮件,而在Azure中,您可能需要使用工作者角色和队列。您可以为IIS设置一个web.config转换,为Azure设置一个不同的实现

    根据您拥有的文件数据量,您可以做的另一件事是将文件存储为数据库中的blob列。我相信有人会告诉我,这对性能不好,而且可能会导致