从ASP.NET MVC或Web API应用连接到Azure表存储的最佳实践是什么?
现在,我制作了一个StorageContext类,其中包含对CloudStorageAccount和CloudTableClient的引用,如下所示:
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 req / sec的高流量站点上使用。
我还需要单元测试。像上面一样使用它,我可以传入另一个connString名称,而在单元测试中连接到Azure存储模拟器。
我是在正确的道路上还是有更好的联系方式?
最佳答案
其实你的问题
连接到Azure表存储的最佳实践是什么
从ASP.NET MVC或Web API应用程序?
可以像“在Web应用程序中使用数据访问层的最佳做法是什么”这样重新表述。这是相同的。
您可以找到许多有关数据访问层最佳实践的答案。但是这里的铁律使您的数据访问层与控制器或表示分离。在MVC模式的范围内通过模型使用它的最佳方法,或者,如果您愿意的话,也可以考虑使用存储库和/或工作单元模式。
在您的示例中,您的数据访问逻辑已经包装在StorageContext中,这很好,我将另外提取接口并为其使用DI / IoC和依赖项解析器。谈到您的代码段时就这些了。您走对了路。