【问题标题】:Multiple models vs single model多个模型与单个模型
【发布时间】:2012-02-15 10:44:15
【问题描述】:

我有一个关于 MVC 的问题。特别是关于模型。 假设我的数据库中有一个类别表。现在我想获得单个类别的详细视图和列表的多个类别的结果。此外,我可能需要为不同的目的查询多个类别。

现在的问题是; 拥有两个独立的模型是否更有意义。类似于针对单个类别的操作的类别模型和针对多个类别的类别模型操作。

我的想法是,当我使用category 模型时,我不需要多个类别的其他详细信息。所以把这些分开对我来说很有意义。但我不确定。

有什么想法吗?

【问题讨论】:

  • “现在我想对单个类别提出问题以获取详细信息”没有意义。请问可以修吗?

标签: php model-view-controller kohana-3 hmvc


【解决方案1】:

问题是您的模型应该支持处理单个和多个记录查询。

所以我的建议是使用一个模型并开发您的方法来检索您需要的确切数据。

为单个数据源提供两个模型只会使事情复杂化...

【讨论】:

  • 我不同意这一点,我认为问题的重点已经错过了。首先,无论您的模型是否包含查询数据库的逻辑,这是一个设计选择。一些使用选择将逻辑与业务对象(数据模型)和返回列表或单个业务对象的数据适配器/服务分开。无论哪种方式,重点是提出的第二个对象不会复制任何内容,它只是通过存储单实例模型的集合和一些附加属性来重用现有模型,以获取有关该集合的信息。这是一个好主意 imo
【解决方案2】:

这取决于,您需要为单个类别和多个类别保存不同的数据吗?

如果是这样,您的建议是有意义的,否则您的模型中将有多余的字段。我建议明确区分这两种模型(所以不是CategoryCategories,而是例如SingleCategoryMultipleCategories)。

如果不是,我建议为类别使用一个模型,但为单个和多个类别操作定义不同的操作。我想这就是你的情况。

在后一种情况下,您可以使用抽象超类Category,然后定义两个子类:一个包含单个类别的操作,一个包含多个类别的操作。

【讨论】:

    【解决方案3】:

    我看不出有任何理由为同一个数据集合使用多个模型。

    在 MVC 中,模型表示数据的集合——它可以是单个或多个项目。如果特定模型只代表单个项目,它仍然是数据收集的一部分。

    您为什么想知道使用两个独立的模型?

    【讨论】:

      【解决方案4】:

      我们在自己的 MVC 和 ORM 中所做的是,我们为多个模型实例上的操作创建了一个包装器。这是一个结果集。然后,结果集就可以对一组 Category 模型进行操作。

      供参考:https://github.com/Tuxion/tuxion.cms

      【讨论】:

        【解决方案5】:

        这完全取决于你!

        你是程序员,适合你的就是什么。

        不过补充一下我的推理:

        就可读性和可维护性而言,单个模型类会更好!

        例如

            class get_fruits 
        {
        
        function all_fruit(){}
        
        function one_fruit(){}
        }
        

        这对于其他阅读代码的程序员来说很容易理解

        例如

        $get = new get_fruit();
        $europeanfruits = $get->all_fruits("European");
        $apple = $get->one_fruit ("Apple");
        

        希望这会有所帮助!

        请记住,只要适合您,就没有正确或错误的解决方案!

        【讨论】:

          【解决方案6】:

          在我看来,由您使用的语言提供的列表、数组、集合等是模型集合的有效选择,并且您不应该创建一个简单地包装该集合的附加模型,因为它实际上在全部。如果您想将某个接口与集合相关联,您可以考虑将集合包装在模型中。

          如果您特别需要存储有关集合的其他信息,则应将其包装在另一个模型中。

          我也不同意不应有多个模型的想法,因为数据来自同一个数据源。事实上,我认为您不应该将数据库逻辑放在模型本身中,而应使用返回业务对象的单独服务。这种封装级别允许您在应用程序级别上操作高级模型(或业务对象),同时将数据访问逻辑与这些对象分离。如果您随后需要将数据库换成其他东西,您只需替换数据访问逻辑和创建模型的接口即可。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-01-22
            • 1970-01-01
            • 1970-01-01
            • 2011-06-29
            • 1970-01-01
            • 1970-01-01
            • 2021-06-19
            相关资源
            最近更新 更多