我前几天只是查找责任链,我遇到了这个例子.
基本上,有一个抽象处理程序,然后是具体的处理程序,每个处理程序都实现父抽象处理程序的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?在性能,内存消耗,可维护性和可伸缩性方面哪个更好?
我正在使用 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)