我有一个问题,我试着在谷歌上搜索,但说实话,我真的不知道如何搜索,甚至不知道如何提出这个特殊的问题。
让我们想象一下,我有以下内容。
控制器
[HttpGet]
public virtual ActionResult Summary()
{
var summaryViewModel = new CheckoutSummaryViewModel()
{
Products = ProductViewModel.BuildListFromShoppingCart(GetShoppingCart())
};
return View("_Summary", summaryViewModel);
}
ProductViewModel
public class ProductViewModel
{
public string Name
{
get; set;
}
public static List<ProdutoCheckoutViewModel> BuildListFromShoppingCart(ShoppingCart shoppingCart, IMappingService mappingService)
{
var itemsInCart = new List<ProductViewModel>();
foreach (var item in shoppingCart.ItemsInCart)
{
var itemViewModel = mappingService.Map<Product, ProductViewModel>(item.Product);
itemViewModel.Quantidade = item.Quantity;
itemsInCart.Add(itemViewModel);
}
return itemsInCart;
}
}
这不是生产代码。只是让我解释一下我的意思。
这是正确的方法吗?
另一种情况,我需要将Session状态传递给一个静态的帮助类。
public static Guid GetCheckoutId(HttpSessionStateBase session)
{
return (Guid)session["checkoutId"];
}
或者,有时候我也需要把我的 "unifOfWork "作为参数传递给帮助者方法,因为我使用了仓库模式。
我经常遇到这个 "问题",但我还没有找到最好的方法。
PS: 如果你们谁有更好的标题,请告诉我,这样我就可以更新它。
Controller如果你使用DI,它将看起来像这样。
public class CheckoutController
{
private readonly ICheckoutService _checkoutService;
public CheckoutController(ICheckoutService checkoutService) =>
_checkoutService = checkoutService;
[HttpGet]
public virtual ActionResult Summary()
{
var shoppingCartData = _checkoutService.GetShoppingCart(Session["..."]);
// The viewmodel here could be returned by your service or the service
// would return all required data and the viewmodel simply transforms that Dto into what is needed by the UI
var summaryViewModel = new CheckoutSummaryViewModel()
{
Products = shoppingCartData
};
return View("_Summary", summaryViewModel);
}
}