使用相同的行为创建两个“不同”的方法。
当有人访问我的应用程序时,我想显示一个项目列表 - 这个列表与myapp.com/products/offers/
提供的列表相同。换句话说,我不想在两种方法之间重复相同的代码。 所以我问:我该怎么办?
在HomeController
,Index
方法,其类型为ActionResult
,有以下代码的片段:
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);
}
现在有三件事需要考虑:
myapp.com/
更改为myapp.com/Products/Offers/
,我真的不希望这样; ProductsController
中的某些内容在HomeController
上不应该存在逻辑。而且,再次: 我该怎么办?
答案 0 :(得分:6)
将公共逻辑移动到“服务”或“助手”类:
class ProductListingHelper {
public ProductsViewModel GetProductsViewModel() {
var products = Products.Build.OffersList();
var categories = Categories.Build.Main();
return new ProductsViewModel() {
Products = products,
Categories = categories
};
}
}
然后,在两个控制器中,执行以下操作:
return View(new ProductListingHelper().GetProductsViewModel());
请注意,正如Erik在评论中指出的那样,这将要求您创建两个视图。但是,您也可以通过将ProductListView作为其他两个视图呈现的部分视图来减少重复。
答案 1 :(得分:2)
添加一个类(通常称为“服务”类)并将要重用的代码移动到该类中的方法中(可能调用方法GetProductsViewModel()
)然后从每个类中调用该方法控制器动作。
希望有所帮助。