Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多模型与单一模型_Php_Model View Controller_Kohana 3_Hmvc - Fatal编程技术网

Php 多模型与单一模型

Php 多模型与单一模型,php,model-view-controller,kohana-3,hmvc,Php,Model View Controller,Kohana 3,Hmvc,我有一个关于MVC的问题。特别是关于模型。 假设我的数据库中有一个category表。现在,我想获得详细视图的单个类别和列表的多个类别的结果。此外,出于不同的目的,我可能需要查询多个类别 现在的问题是; 有两个独立的模型是否更有意义。类似于单个类别操作的类别模型和多个类别操作的类别模型 我的想法是,当我使用category模型时,我不需要多个类别的额外细节。所以把这些分开对我来说是有意义的。但我不确定 有什么想法吗?问题是您的模型应该支持处理单个和多个记录查询 因此,我的建议是使用一个模型并开发

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

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

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


有什么想法吗?

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

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


一个数据源有两个模型只会使事情复杂化…

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

如果是这样,您的建议就有意义了,否则您的模型中会有冗余字段。我建议明确区分这两种模式(因此不是
Category
Categories
,而是例如
singlecategories
MultipleCategories

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


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

我看不出对同一数据集使用多个模型的任何理由

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


为什么你想使用两种不同的型号?

这取决于你自己

你是程序员,适合你的就是你的

然而,要补充我的理由:

单个模型类在可读性和可维护性方面会更好

e、 g

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

e、 g

希望这有帮助


记住,只要对你有效,就没有对错的解决方案

在我看来,您使用的语言提供的列表、数组、集合等都是模型集合的有效选择,您不应该创建一个额外的模型来简单地包装这个集合,因为它实际上什么都没有实现。如果想将某个接口与集合关联,可以考虑将集合包装在模型中。

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


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

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


参考资料:

我不同意这一点,我认为问题的重点被忽略了。首先,无论您的模型是否包含查询数据库的逻辑,这都是一个设计选择。有些用户选择使用buiness对象(数据模型)和返回列表或单个业务对象的数据适配器/服务来分离逻辑。无论哪种方式,重点都是所提出的第二个对象没有复制任何内容,它只是通过存储单个实例模型的集合和有关该集合的信息的一些附加属性来重用现有模型。这是一个好主意,imo“现在我想询问两个单一类别的细节”没有意义。你能修好吗?
    class get_fruits 
{

function all_fruit(){}

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