2011-09-27 55 views
1

我正在查看Project Silk项目的源代码,并且有一个“处理程序”模式,我从未见过。首先 - 这link从2009年提到了,但让我挂Project Silk中的处理程序模式

什么样显示的是每个类表示在相关的仓储类各方法的一种方法的一个方法类。类被命名为方法名称。

public class GetFillupsForVehicle 
{ 
    private readonly IFillupRepository _fillupRepository; 

    public GetFillupsForVehicle(IFillupRepository fillupRepository) 
    { 
     _fillupRepository = fillupRepository; 
    } 
    public virtual IEnumerable<FillupEntry> Execute(int vehicleId) 
    { 
     try 
     { 
      var fillups = _fillupRepository 
       .GetFillups(vehicleId) 
       .OrderBy(f => f.Date) 
       .ToList(); 

      return new ReadOnlyCollection<FillupEntry>(fillups); 
     } 
     catch (InvalidOperationException ex) 
     { 
      throw new BusinessServicesException(Resources.UnableToRetireveFillupsExceptionMessage, ex); 
     } 
    } 
} 

有人可以解释这种模式或指向我的东西,我可以阅读了解更多?

感谢, 保罗

+1

看起来像命令模式 – jgauffin

+0

那么应该不是类被称为GetFillupsForVehicleCommand?我需要深入了解这种情况,现在可能会更有意义。谢谢。 –

+0

没有什么说类必须以“命令”结尾 – jgauffin

回答

0

请参阅本有关Project Silk这将是更切合现在采用。

在我从Microsoft提供的PDF文档转换为Project Silk的代码片段中,将帮助您了解如何使用它。根据我的观点,它更多地被视为在商业领域触发事件的脚手架。

另请参阅此specific post,可能会将光线投射到目标位置。

public ActionResult Add(int vehicleId) 
{ 
var vehicles = Using<GetVehicleListForUser>() 
.Execute(CurrentUserId); 
var vehicle = vehicles.First(v => v.VehicleId == vehicleId); 
var newFillupEntry = new FillupEntryFormModel 
{ 
Odometer = (vehicle.Odometer.HasValue) 
? vehicle.Odometer.Value : 0 
}; 
var fillups = Using<GetFillupsForVehicle>() 
.Execute(vehicleId) 
.OrderByDescending(f => f.Date); 
var viewModel = new FillupAddViewModel 
{ 
VehicleList = new VehicleListViewModel(vehicles, vehicleId) 
{IsCollapsed = true}, 
FillupEntry = newFillupEntry, 
Fillups = new SelectedItemList<Model.FillupEntry>(fillups), 
}; 
ViewBag.IsFirstFillup = (!fillups.Any()); 
return View(viewModel); 
} 

+0

请参考http://weblogs.asp.net/shijuvarghese/archive/2011/10/18/cqrs-commands-command-handlers-and-command-dispatcher.aspx这个链接,这将给你更多关于处理程序的见解以及它应该如何处理CQRS的风格 –