【问题标题】:Handler pattern in Project SilkProject Silk 中的处理程序模式
【发布时间】:2012-07-20 17:29:35
【问题描述】:

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

示例显示的是一个方法类,其中每个类代表相关存储库类中每个方法的一个方法。这些类被命名为方法名称。

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);
        }
    }
}

有人可以解释一下这种模式或指出一些我可以阅读以了解更多信息的内容吗?

谢谢, 保罗

【问题讨论】:

  • 那这个类不应该叫GetFillupsForVehicleCommand吗?我需要深入研究它是如何被调用的,现在也许它会更有意义。谢谢。
  • 没有说类必须以“Command”结尾
  • 但是类名不应该是名词吗?无论如何,我正在查看这个示例应用程序,并且 - 从控制器 - 有时他们调用服务(调用存储库),有时他们调用这些“命令”(调用存储库)。我正试图围绕整个模式展开思考,但我不确定他们如何决定使用哪种模式。感谢您的意见。
  • 你确定他们确定他们为什么混合吗? ;)
  • 这是来自 Microsoft Patterns & Practices 的新 Project Silk 参考应用程序。目前我还不确定。

标签: design-patterns repository handler


【解决方案1】:

请参阅有关Project Silk 的此信息,现在采用该信息将更加相关。

在我从 Microsoft 在 Project Silk 上提供的 PDF 文档中重新发布的代码 sn-p 中,将帮助您了解它是如何被使用的。在我看来,它更多地被认为是在业务领域级别触发事件的脚手架。

另请参阅此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);
}

【讨论】:

猜你喜欢
  • 2013-08-21
  • 1970-01-01
  • 2013-02-08
  • 2018-08-26
  • 2020-04-09
  • 1970-01-01
  • 2017-07-29
  • 2014-06-02
  • 1970-01-01
相关资源
最近更新 更多