显示按类别和子类别按干燥方式排序的产品列表

时间:2012-07-14 21:47:20

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

我有以下实体:

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>的网页,然后按ProductsCategory进行排序 - 然后按Category的每个Products排序SubCategory

我的ViewModel应该是什么样的?

起初我想出了类似的东西:

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

但是我的控制器变得充满逻辑以提取唯一的CategoriesSubCategories,我没有干净的方法来处理每个Category具有不同的{{1}列表的事实1}}。

任何具有按类别排序对象的经验的人 - 你能否正确地指导我如何干净地处理这种情况?我可以完成工作,但我觉得我的代码不必要地草率而且不干。

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

1 个答案:

答案 0 :(得分:1)

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

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之间创建一个关系。