Ecn*_*lyr 1 c# asp.net-mvc refactoring dry asp.net-mvc-3
我有以下行动:
public ActionResult ProductList(int category)
{
IEnumerable<Product> productList = repository.Products.Where(p => p.CategoryId == category);
return PartialView("ProductList", productList);
}
public ActionResult CategoryList(int parentCategory)
{
IEnumerable<Category> categoryList = repository.Categories.Where(p => p.ParentCategoryId == parentCategory);
return PartialView("CategoryList", categoryList);
}
Run Code Online (Sandbox Code Playgroud)
构建以下PartialViews:
@model POS.Domain.Entities.Product
<div class = "item">
<h3>@Model.Name</h3>
@Model.Description
@Model.Category.Name
<h4>@Model.Price.ToString("c")</h4>
</div>
@model POS.Domain.Entities.Category
<div class = "category" id= "@Model.CategoryId">
<h2>@Model.Name</h2>
<a href='/get-partial-view'>Get Products from the category: @Model.Name </a>
<div class="divResult">
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
并通过以下单元测试进行测试:
[TestMethod]
public void ProductListReturnsAppropriateProducts()
{
// Arrange - create a controller
var controller = new ProductController(_mockRepository.Object);
// Action
var result = (PartialViewResult) controller.ProductList(2);
// Assert
Assert.AreEqual(((IEnumerable<Product>) result.ViewData.Model).Count(), 2);
Assert.IsTrue(((IEnumerable<Product>) result.ViewData.Model).Count(o => o.Name == "P4") == 1);
}
[TestMethod]
public void CategoryListReturnsAppropriateCategories()
{
// Arrange - create a controller
var controller = new ProductController(_mockRepository.Object);
// Action
var result = (PartialViewResult) controller.CategoryList(2);
// Assert
Assert.AreEqual(((IEnumerable<Category>) result.ViewData.Model).Count(), 3);
Assert.IsTrue(((IEnumerable<Category>) result.ViewData.Model).Count(o => o.Name == "C4") == 1);
}
Run Code Online (Sandbox Code Playgroud)
这几乎是完全重复 - 我想学习更密切地遵守DRY原则.
我的行为几乎完全相同 - 除了我需要一个生成产品列表和一个类别列表...(这最终用于生成一个页面,其中列出了用户可以单击以查看这些类别中的所有产品的类别).
必须有一种方法可以将这些几乎重复的方法合并到一个方法中,该方法可以适当地处理产品与类别.我应该如何去从具有两个独立的动作移动到具有一个动作,说明如何处理products和categories?
你的DRY有点太过分了......这是样板代码是的......但是它处理不同的实体并且应该保持分离.
通过将它们组合在一起,您将打破单一责任原则.如果您需要更改其工作方式,则不必更改与其他相关的任何内容.
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |