gpt4 book ai didi

c# - 具有相同行为的两种方法

转载 作者:行者123 更新时间:2023-11-30 19:42:05 25 4
gpt4 key购买 nike

目标

创建两个具有相同行为的“不同”方法。

问题

当有人访问我的应用程序时,我想显示一个项目列表——这个列表与 myapp.com/products/offers/ 提供的相同。换句话说,我不想在两种方法之间重复相同的代码。 所以我问:我必须做什么?

我现在在做什么

HomeController中,在类型为ActionResultIndex方法上,有如下代码片段:

public ActionResult Index()
{
return RedirectToAction("Offers", "Products");
}

同时,在 ProductsController 中,在 Offers 方法上:

public ActionResult Offers()
{
var products = Products.Build.OffersList();
var categories = Categories.Build.Main();

ProductsViewModel viewModel = ProductsViewModel
{
Products = products,
Categories = categories
};

return View(viewModel);
}

现在需要考虑三件事:

  1. 我的应用程序将客户端重定向到另一个页面,生成第二个服务器请求,浪费带宽;
  2. 应用程序的 URL 从 myapp.com/ 更改为 myapp.com/Products/Offers/,我真的不想要这个;
  3. 如果我重复代码将是多余的 — 此外 ProductsController 中的某些内容按逻辑不应存在于 HomeController 中。

再说一次:我必须做什么?

最佳答案

将通用逻辑移动到“服务”或“助手”类中:

class ProductListingHelper {
public ProductsViewModel GetProductsViewModel() {
var products = Products.Build.OffersList();
var categories = Categories.Build.Main();

return new ProductsViewModel() {
Products = products,
Categories = categories
};
}
}

然后,在您的两个 Controller 中,执行此操作:

 return View(new ProductListingHelper().GetProductsViewModel());

请注意,正如 Erik 在评论中指出的那样,这将需要您创建两个 View 。但是,您也可以通过将 ProductListView 作为其他两个 View 呈现的分部 View 来减少此处的重复。

关于c# - 具有相同行为的两种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18137561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com