【问题标题】:Displaying a list of Products sorted by Category and SubCategory in a DRY fashion以 DRY 方式显示按类别和子类别排序的产品列表
【发布时间】:2012-07-14 21:47:20
【问题描述】:

我有以下实体:

public class Product{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Category { get; set; }
    public string SubCategory { get; set; }
}

我最终希望显示一个页面,该页面采用IEnumerable<Product> 并首先按CategoryProducts 进行排序 - 然后按SubCategoryProducts 中的每个Category 进行排序。

我的 ViewModel 应该是什么样子?

起初我想出了这样的东西:

public class ProductListViewModel{
    public IEnumerable<Product> Products { get; set; }
    public IEnumerable<string> Categories { get; set; }
    public IEnumerable<string> SubCategories { get; set; }
}

但随后我的控制器变得充满逻辑来提取唯一的CategoriesSubCategories,我无法处理每个Category 具有不同SubCategories 列表的事实。

任何有按类别分类对象经验的人 - 你能告诉我如何干净地处理这种情况吗?我可以完成工作,但我觉得我的代码不必要地草率而不是 DRY。

我还想知道我的 Product 类的结构是否以不恰当的方式处理 Categories/SubCategories - 其他人是否也有同感? (我认为我的类别可能更适合完全作为单独的对象)

【问题讨论】:

  • 您希望信息如何显示在视图上?
  • @DarinDimitrov 用户将看到Categories 的列表 - 他们将单击Category 并且该Category 中所有产品的列表将滑出。现在可见的Products 列表将按SubCategory 排序。

标签: asp.net-mvc entity-framework dry categories conventions


【解决方案1】:

关于您关于模型结构的问题,我认为 Category 绝对应该 是一个单独的实体 - 您的数据库将被规范化(类别不应在数据库中重复多次)。也许:

public class Product{
    public int ID { get; set; }
    public string Name { get; set; }
    public Category Category { get; set; }
}

public class Category{
    public int ID { get; set; }
    public string Name { get; set; }
    public SubCategory SubCategory { get; set; }
}


public class SubCategory{
    public int ID { get; set; }
    public string Name { get; set; }
}

通过这种方式,您可以从产品中分离出类别(您还可以通过在产品实体中使用 ICollection 来为单个产品创建多个类别)。这也创建了 Category 和 SubCategory 之间的关系。

【讨论】:

  • 看起来很合理。我目前无法真正专注于回应,当我有时间给予必要的关注时,我会返回并发表评论。
  • 这是处理我的情况的一个非常好的方法。非常感谢。
猜你喜欢
  • 2015-12-08
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
  • 2019-07-19
相关资源
最近更新 更多