我对MVC的理解如下(因为它非常错误,我以后是新手)
我正在使用CodeIgniter,但我猜测它不仅限于此,甚至可能仅限于PHP框架。
我在哪里放置全局课程?
我可能有一个产品模型,然后运行一个从数据库中收集20个产品的查询。我现在制作20个模型还是应该为它设一个单独的类,如果是后者,我在哪里放这个类(其他控制器也需要使用它)
答案 0 :(得分:4)
在讨论如何处理产品时,模型是错误的用法:每个产品都是价值对象(VO)(或数据传输对象/ DTO,更好地适合您的口腔)。值对象通常具有表包含的相同字段。在您的情况下,ProductVO应该具有Products表中的字段。
模型是数据访问对象(DAO),其方法类似于
findByPk --> returns a single value object
findAll --> returns a collection of value objects (0-n)
etc.
在您的情况下,您将拥有类似上述方法的ProductDAO。然后,ProductDAO将返回ProductVO及其集合。
数据访问对象还可以返回 Business Objects(BO),其中可能包含多个VO以及特定于业务案例的其他方法。
附录: 在您的控制器中,您可以致电ProductDAO以查找所需的产品。 然后将返回的ProductVO传递给视图(作为Java中的请求属性)。然后视图循环显示/显示productVO的数据。
答案 1 :(得分:3)
模型是业务逻辑发生的应用程序的一部分。模型表示对象之间的现实关系和依赖关系,例如:员工向Manager报告,Manager监督许多Employees,Manager可以将Task分配给Employee,Task在逾期时发出通知。模型CAN和大多数情况下DO与数据库接口,但这不是必需的。
查看基本上是可以显示或帮助显示的所有内容。视图包含模板,模板对象,处理模板组成和排料,以页眉和页脚包裹,并且在公知的格式(X / HTML,也XML,RSS / ATOM,CSV)。
一个产生输出控制器是将用户操作转换为模型操作的转换层。换句话说,它告诉模型要做什么并返回响应。控制器方法应尽可能小,所有业务处理应在Model中完成,视图逻辑处理应在View中进行。
现在,回到你的问题。这真的取决于你是否需要为每个产品分别上课。在大多数情况下,一个类就足够了,应该创建20个实例。由于产品代表业务逻辑,它应该属于应用程序的Model部分。
答案 2 :(得分:1)
在CakePHP中还有3个“部分”:
许多模型使用的逻辑应该作为一种行为。我不知道CodeIgniter是否有这个逻辑,但如果它没有,我会尝试实现它。您可以阅读有关行为here的信息。
(组件帮助控制器共享逻辑和帮助程序以相同的方式帮助视图)。
答案 3 :(得分:1)
最简单的方法是:
答案 4 :(得分:1)
@Alexander提到CakePHPs 行为,组件和助手。这些非常适合抽象出常见的功能。我发现行为特别有用,因为大部分业务逻辑都在模型中进行。我目前正在开展一个项目,我们的行为如下:
等
对于甚至超越MVC框架的代码,即用于各种事物的代码库,这些代码库与您正在使用的特定框架无关 - 在我们的例子中,像视频编码类等等.CakePHP有供应商文件夹。
任何与CakePHP无关的东西都在那里。
我怀疑CodeIgniter没有一个非常灵活的结构,它比CakePHP更小更轻,但是快速查看CakePHP Manual以查看Behaviors,Components,Helpers和Vendors文件夹如何有用。
从模型中包含一些常见的帮助类并保持良好并且DRY
应该是一件容易的事。