C# //忽略或记录(以便我们可以调整可见性超时) } 其他的 { //不是我们所期望的错误 投掷; } } } 其他的 { //允许控制下降到底部,此时睡眠计时器。。。 } } 捕获(例外e) { //对齐:线程不能失败。 //Todo:记录此异常 //允许控制下降到底部,此时睡眠计时器。。。 //理由:不这样做可能会导致特定损坏条目上的队列抖动 } //todo:Thread.Sleep()不好 //用更好的东西代替。。。 睡眠(9000); }

C# //忽略或记录(以便我们可以调整可见性超时) } 其他的 { //不是我们所期望的错误 投掷; } } } 其他的 { //允许控制下降到底部,此时睡眠计时器。。。 } } 捕获(例外e) { //对齐:线程不能失败。 //Todo:记录此异常 //允许控制下降到底部,此时睡眠计时器。。。 //理由:不这样做可能会导致特定损坏条目上的队列抖动 } //todo:Thread.Sleep()不好 //用更好的东西代替。。。 睡眠(9000); },c#,azure,azure-storage,t4,azure-storage-queues,C#,Azure,Azure Storage,T4,Azure Storage Queues,问:“DataContext”是这个类的合适名称吗 在.NET中,我们有很多DataContext类,因此在某种意义上,您希望名称适当地传达类的功能,我认为XyzQueueDataContext正确地传达类的功能-尽管您无法从中查询 如果您想与公认的模式语言保持更一致,请调用任何封装对网关的外部系统访问的类,而更具体地说,您可能希望在-语言中使用术语通道 问:以我所做的方式命名队列操作名称是一种糟糕的做法吗 当然,它将队列名称与类紧密耦合。这意味着,如果您以后决定要将它们解耦,您就不能 作为一般

问:“DataContext”是这个类的合适名称吗

在.NET中,我们有很多DataContext类,因此在某种意义上,您希望名称适当地传达类的功能,我认为
XyzQueueDataContext
正确地传达类的功能-尽管您无法从中查询

如果您想与公认的模式语言保持更一致,请调用任何封装对网关的外部系统访问的类,而更具体地说,您可能希望在-语言中使用术语通道

问:以我所做的方式命名队列操作名称是一种糟糕的做法吗

当然,它将队列名称与类紧密耦合。这意味着,如果您以后决定要将它们解耦,您就不能

作为一般性的评论,我认为这门课可能会受益于尝试做得更少。使用队列与管理队列不同,因此我建议在实例中注入一个CloudQueue,而不是将所有队列管理代码都放在那里。以下是我如何实现AzureChannel构造函数:

private readonly CloudQueue queue;

public AzureChannel(CloudQueue queue)
{
    if (queue == null)
    {
        throw new ArgumentNullException("queue");
    }

    this.queue = queue;
}

这更适合,您现在可以在自己的(可重用)类中实现队列管理。

我有点困惑-T4是从哪里来的?@Garethj我打算使用此问题的答案创建T4模板。对T4感兴趣的人可能出于自己的目的对该解决方案感兴趣。谢谢!我想我的Blob类也应该命名为“channel”?还有,Azure Table呢?既然我可以公开IQueryable,那么这应该是xyzDataContext吗?我想听听您对DRY的看法,项目结构就是一个很好的例子,说明为什么不应该在控制器中实现应用程序逻辑。控制器的单一职责应该是处理传入的请求并生成web结果(通常是HTML)。它应该授权给一个与框架无关的库:通常是域模型。
private readonly CloudQueue queue;

public AzureChannel(CloudQueue queue)
{
    if (queue == null)
    {
        throw new ArgumentNullException("queue");
    }

    this.queue = queue;
}