【问题标题】:Child-Parent table : where I should put the method in 2 class?子父表:我应该把方法放在 2 类中?
【发布时间】:2009-02-23 16:56:33
【问题描述】:

我有两个具有父子关系的表,但仍然对如何将其从表映射到类感到困惑。封装方法而不使用业务对象/值对象的简单类。表格是类别和产品。

当一个网络表单列出某个类别的产品时,我应该怎么做?

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

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

哪个类应该拥有该方法?

【问题讨论】:

    标签: c# sql oop


    【解决方案1】:

    没有。

    为什么?

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

    产品:一个产品有一个类别,但对同一类别中的其他产品一无所知。

    然后呢?

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

    例子:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

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

        如果您要经常访问它,您可以考虑将其设置为您的 Category 对象上的一个属性,以便延迟加载该类别的 Products。 IE。第一次访问该属性时,它会从数据库中检索 Products 并将它们存储在 Category 对象中;随后的调用只需返回该列表,而无需再次访问数据库。

        【讨论】:

          【解决方案4】:

          简短的回答:两者都不是。你需要一个集合类。

          一般来说,一个类将代表一个表中的一行,而一个集合将代表该表或其子集。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-12-11
            • 2016-05-13
            • 1970-01-01
            • 2011-12-11
            • 1970-01-01
            • 2018-02-12
            • 2010-09-28
            • 2020-03-03
            相关资源
            最近更新 更多