Azure Table Storage最佳实践(ASP.NET MVC/WebApi)

4

如何在ASP.NET MVC或Web API应用程序中连接到Azure Table Storage的最佳实践是什么?

目前,我已经创建了一个StorageContext类,它持有对CloudStorageAccountCloudTableClient的引用,如下所示:

public class StorageContext
{
    private static CloudStorageAccount _storageAccount;
    private static CloudTableClient _tableClient;

    public StorageContext() : this("StorageConnectionString") { }

    public StorageContext(string connectionString)
    {
        if (_storageAccount == null)
            _storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings[connectionString].ConnectionString);

        if (_tableClient == null)
            _tableClient = _storageAccount.CreateCloudTableClient();
    }

    public CloudTable Table(string tableName)
    {
        var table = _tableClient.GetTableReference(tableName);

        table.CreateIfNotExists();

        return table;
    }
}

我正在这样使用我的控制器:

public class HomeController : ApiController
{
    private StorageContext db;

    public HomeController() : this(new StorageContext()) { }

    public HomeController(StorageContext context)
    {
        this.db = context;
    }

    public IHttpActionResult Get()
    {
        var table = db.Table("users");
        var results = (from user in table.CreateQuery<User>()
                       select user).Take(10).ToList();

        return Ok<List<User>>(results);
    }
}

这是做这件事情的首选方式吗?

API将在高流量网站上使用,每秒请求数> 1000。

我还需要单元测试。像上面那样使用它,我可以传递另一个connString名称,并在我的单元测试中连接到Azure存储模拟器。

我走在正确的道路上还是有更好的连接方式?

1个回答

1

实际上,您的问题

如何从ASP.NET MVC或Web API应用程序连接到Azure Table Storage的最佳实践是什么?

可以重新表述为“在Web应用程序中使用数据访问层的最佳实践是什么”。这是相同的。

您可以找到很多关于数据访问层最佳实践的答案。但是铁则是将数据访问层与控制器或表示分开。最好的方法是通过MVC模式中的Model来使用它,或者如果您喜欢,可以考虑Repository和/或Unit of work模式。

在您的示例中,您的数据访问逻辑已经包装在StorageContext中,这很好,我会额外提取接口并为其使用DI / IoC和依赖项解析器。就您的代码片段而言,这就是全部。您正在正确的道路上。


我没有选择使用Repository/UoW的原因是因为这个应用程序相当简单,所以我认为它只会增加应用程序的复杂性,而且我不会得到任何好处。我可能是错的。 - Martin
你不应该使用Repository和UoW,这只是一个选项。实际上,从你的片段中可以看出,你已经将数据访问逻辑封装在StorageContext中并进行了分离。所以我写下了我会做的额外操作,但是你的片段看起来没有问题,没有使用Repository也许更好,因为它会增加更多的复杂性,这取决于你。 - Regfor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接