Child-Parent表:我应该把方法放在2级?

时间:2009-02-23 16:56:34

标签: c# sql oop

我有两个表与父子关系,并仍然混淆如何从表映射到类。简单类,它封装方法而不使用业务对象/值对象。表格是类别和产品。

当webform列出某个类别的产品时,我应该采取什么方法?

创建类别对象并调用 GetProductsByGroup(int groupId)

创建产品对象并调用 GetProductsByGroup(int groupId)

哪个班级应该拥有该方法?

4 个答案:

答案 0 :(得分:3)

他们都不是。

<强>为什么吗

类别:一个类别本身就有意义,它不应该知道任何产品存在。

产品:产品有一个类别,但不了解同一类别中的其他产品。

哪里呢?

在提供根据规范检索产品(可称为产品存储库)的方法的服务中。

示例:

public static class ProductRepository
{
    public static Collection<Product> GetProductsByGroup(int groupID)
    {
         ...
    }
}

答案 1 :(得分:2)

该方法的主要关系是什么 - 产品。因此我将它放在Products类中,因为它将处理与产品相关的所有内容。同样,Category类可能有多种处理,查询和处理方法。修改类别。

答案 2 :(得分:0)

这完全取决于你,但我会做出以下区分:

如果方法在Product类上,请将其设为静态方法。

如果方法在Category类上,请不要将其设置为静态。

如果您经常访问它,您可以考虑将它作为Category对象的属性,延迟加载该类别的产品。即第一次访问该属性时,它从数据库中检索产品并将它们存储在Category对象上;后续调用然后只返回该列表而无需再次访问数据库。

答案 3 :(得分:0)

简短回答:两者都没有。你需要一个集合类。

通常,类会在表中表示一行,而一个集合将表示该表或其子集。

如果您不想使用业务或数据层对象(顺便说一句,这是合适的),那么任何一个类都可以在实践中拥有该方法,但作为静态方法 。但是,生产类拥有它可能会更有意义,因为它应该返回产品集合