C# 具有相同行为的两种方法 目标
创建两个具有相同行为的“不同”方法 问题 当有人访问我的应用程序时,我想显示一个项目列表,该列表与C# 具有相同行为的两种方法 目标,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,创建两个具有相同行为的“不同”方法 问题 当有人访问我的应用程序时,我想显示一个项目列表,该列表与myapp.com/products/offers/提供的列表相同。换句话说,我不想在两个方法之间重复相同的代码所以我问:我必须做什么? 我现在在做什么 在HomeController上,在其类型为ActionResult的Index方法上,有以下代码片段: public ActionResult Index() { return RedirectToAction("Offers", "Pr
myapp.com/products/offers/
提供的列表相同。换句话说,我不想在两个方法之间重复相同的代码所以我问:我必须做什么?
我现在在做什么
在HomeController
上,在其类型为ActionResult
的Index
方法上,有以下代码片段:
public ActionResult Index()
{
return RedirectToAction("Offers", "Products");
}
同时,在ProductsController
上的提供了方法:
public ActionResult Offers()
{
var products = Products.Build.OffersList();
var categories = Categories.Build.Main();
ProductsViewModel viewModel = ProductsViewModel
{
Products = products,
Categories = categories
};
return View(viewModel);
}
现在有三件事需要考虑:
我的应用程序将客户端重定向到另一个页面,生成第二个服务器请求,浪费带宽李>
应用程序的URL从myapp.com/
更改为myapp.com/Products/Offers/
,我真的不想这样李>
如果我重复该代码,将是多余的-此外,ProductsController
中的某些内容在HomeController
上按逻辑不应该存在
还有:我必须做什么?将公共逻辑移到“服务”或“助手”类中:
然后,在两个控制器中执行以下操作:
return View(new ProductListingHelper().GetProductsViewModel());
请注意,正如Erik在评论中指出的,这将需要您创建两个视图。但是,您也可以通过将ProductListView作为其他两个视图呈现的部分视图来减少此处的重复。添加一个类(通常称为“服务”类),并将要重用的代码移动到该类中的方法中(可能调用方法GetProductsViewModel()
)然后从每个控制器操作调用该方法
希望这能有所帮助。我没有越过@SimonWhitehead的肩膀,我还要提到的是,除非你做额外的工作,否则它需要两个视图(足够简单,但没有提及)。两个相同的视图?认真地oO@GuilhermeOderdenge不完全是。控制器的逻辑可能不同。。普通的东西被移动到助手中。此外,视图可能略有不同。但是,通过将通用产品列表移动到局部视图中,您可以独立地更改周围的视图,同时保持它们之间的产品列表通用。注意,问题只是说“在操作之间有一些重复的逻辑,如何减少重复?”。它没有特别提到它们将是相同的。谢谢,@SimonWhitehead,但我找到了一个(暂时?)解决方案:默认情况下在产品
文件夹上进行视图()
方法搜索。我不知道这是一个好的实践还是一个好的行为,但可以避免冗余。您对此有何看法?这完全取决于您的应用程序的要求。以后,您可能会发现这样更改默认行为很麻烦。。但就性能而言,默认情况下搜索视图的方式没有什么不同。
return View(new ProductListingHelper().GetProductsViewModel());