小编Bhu*_*hah的帖子

Chain Of Responsibility设计模式和使用简单的if-elseif-else块有什么区别?

我前几天只是查找责任链,我遇到了这个例子.

基本上,有一个抽象处理程序,然后是具体的处理程序,每个处理程序都实现父抽象处理程序的handle方法.实现是这样的,首先检查该特定处理程序是否可以处理当前请求,如果不是,则将请求传递给其后继者.

现在,我也可以使用简单的if-else条件块做同样的事情.从上面的链接中获取第一个示例,以下是我将如何更改它:

class SingleHandler
{
    if(request > 0 && request <= 10)
    {
        // Process request
    }
    else if(request > 10 && request <= 20)
    {
        // Process request differently
    }
    else if(request > 20 && request <= 30)
    {
        // Process request differently
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是,两者之间的根本区别是什么?如果我可以使用if-else块提供完全相同的功能,是否有任何具体原因我应该使用Chain of Responsibility?在性能,内存消耗,可维护性和可伸缩性方面哪个更好?

design-patterns chain-of-responsibility

8
推荐指数
1
解决办法
1391
查看次数

异步 MVC 控制器操作方法执行不等待“等待”

我正在使用 MVC 4 和 .NET 4.5。我希望利用新的 TAP(异步等待)构建一个异步控制器。我从Controller和 not继承了这个控制器AsyncContoller,因为我使用的是基于任务的异步性,而不是基于事件的异步性。

我有两种操作方法 - 一种同步执行操作,另一种异步执行相同的操作。我的视图中的表单中还有两个提交按钮,每个操作方法一个。

下面是这两种方法的代码:

同步:

[HttpPost]
public ActionResult IndexSync(FormCollection formValues)
{
        int Min = Int32.Parse(formValues["txtMin"]);
        int Count = Int32.Parse(formValues["txtCount"]);
        string Primes;
        DateTime started = DateTime.Now;
        using (BackendServiceReference.ServiceClient service = new ServiceClient())
        {
            Primes = service.GetPrimesServiceMethod(Min, Count);
        }
        DateTime ended = DateTime.Now;
        TimeSpan serviceTime = ended - started;
        ViewBag.ServiceTime = serviceTime;
        ViewBag.Primes = Primes;

        return View("Index");
}
Run Code Online (Sandbox Code Playgroud)

异步:

[HttpPost]
public async Task<ActionResult> IndexAsync(FormCollection formValues)
{
        int Min = Int32.Parse(formValues["txtMin"]); …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net-mvc asynchronous asp.net-mvc-4

2
推荐指数
1
解决办法
2376
查看次数