Model view controller MVC/HMVC与面向对象编程
我一直在阅读和学习面向对象编程(以及——感谢StackOverflow上的建议)。我还学习了如何使用两个PHP MVC框架(特别是和) 我所读到的一些面向对象原则在MVC框架中的处理方式有所不同。我想我已经设法理解了这些差异以及做出决定的原因(完整且易于使用的解决方案),但我想测试一下我的假设……因此,如果你能幽默我……请评论或更正 假设#1: 考虑web应用程序的正确抽象,包含类库的目录应该位于包含表示文件的目录之外。该组织遵循DRY(“不要重复自己”)原则,允许多个演示文件夹(www.domain.com、management.domain.com、api.domain.com等)使用相同的对象 假设#2: 如果所有类都位于演示文件夹之外,那么MVC实现中的模型只使用这些类的实例。如果这是真的,那么MVC框架只是一个表示类(控制器),它帮助管理输入(GET&POST请求)、响应(模型或实例)和输出(视图或模板) 假设#3: 如果MVC框架只是一个表示类,那么控制器实例初始化的数据库类将破坏控制器类的抽象。(控制器实例的)模型不应该有(“has”)数据库,它应该有类库中的一个对象(用户、产品),而该对象应该有一个数据库 假设#4: 此外,如果MVC框架只是一个表示类,那么控制器实例初始化的数据库类与控制器类的耦合过于紧密。从一种存储方法更改为另一种存储方法需要重新分解所有模型 假设#5: 在HMVC框架中,包含数据库的控制器的问题更严重,因为您的模型具有更多的模块(更多的模型,更多的重分解) 更新: 对不起,我可能使用了一些松散的术语控制器和模型…也许这说明了紧耦合。我感到困惑的根源在于这个问题 对于一个模型,它不应该是:Model view controller MVC/HMVC与面向对象编程,model-view-controller,oop,codeigniter,kohana,Model View Controller,Oop,Codeigniter,Kohana,我一直在阅读和学习面向对象编程(以及——感谢StackOverflow上的建议)。我还学习了如何使用两个PHP MVC框架(特别是和) 我所读到的一些面向对象原则在MVC框架中的处理方式有所不同。我想我已经设法理解了这些差异以及做出决定的原因(完整且易于使用的解决方案),但我想测试一下我的假设……因此,如果你能幽默我……请评论或更正 假设#1: 考虑web应用程序的正确抽象,包含类库的目录应该位于包含表示文件的目录之外。该组织遵循DRY(“不要重复自己”)原则,允许多个演示文件夹(www.dom
$user = new User($id);
$data['name'] = $user->getName();
$data['title'] = $user->getTitle();
return $data
而不是:
$query = $this->db->get_where('user', array('id' => $id), 1, 0);
$row = $query->row_array();
$data['name'] = $row['name'];
$data['title'] = $row['title'];
return $data
假设#1:思考web的正确抽象
应用程序,包含
类库应该是
位于目录之外
包含演示文稿文件。
这个组织坚持干巴巴的原则
(“不要重复你自己”)校长
允许多次演示
文件夹(www.domain.com,
management.domain.com、api.domain.com、,
使用相同的对象
这是正确的,因为库不用于表示(即不是视图)。它们是跨多个控制器使用的模块。通常,它们不应该使用持久数据,因为它们不是模型,但在某些情况下是模型(例如codeigniter会话)
假设2:
如果您的所有类都位于
在演示文稿文件夹之外,
然后是MVC中的模型
实现只需使用
那些课。如果那是真的,那么
MVC框架只是一个
演示类(控制器)
这有助于管理输入(获取&
发布请求),响应(模型)
或实例)和输出(视图或
模板)
这让我有点困惑。您是对的,控制器只是用于GET和POST请求的编排,但要注意调用“presentation类”。控制器负责模型(持久数据)和视图(数据表示)的编排
假设#3:
如果MVC框架只是一个
表示类,然后是数据库
类创建控制器实例
初始化打破了
控制器类。模型
控制器实例)不应具有
(“有”)数据库,它应该有
图书馆中的东西(用户、产品)
那东西应该有
数据库
这很令人困惑,我真的不明白你在说什么。MVC只是一个“表示类”,模型没有“数据库”,框架可以与数据库保持连接,模型是数据库的抽象(如用户、产品等对象)
假设4:
此外,如果MVC框架是
只是一堂演示课
控制器所属的数据库类
实例初始化太紧
与控制器类耦合。
从一种存储方式转变为
另一个需要重新考虑所有因素
模型
控制器不初始化数据库,框架通常只处理访问数据库抽象(模型)的控制器。如果数据库系统被任何东西替换,则只重新考虑模型接口的实现
假设#5:
通过HMVC框架,解决了以下问题:
包含数据库的控制器
更糟糕的是,因为你的模型更
模块(更多型号,更多
重新分解)
HMVC不一定意味着更多的型号。使用HMVC允许项目中的可移植模块可以跨多个控制器访问。通常,您会看到库在非HMVC框架(即不使用db/模板的库)中执行此操作
假设#1:思考web的正确抽象
应用程序,包含
类库应该是
位于目录之外
包含演示文稿文件。
本组织遵守《公约》
httpdocs
subdomains
+--management
+--httpdocs
modules
system
httpdocs
+--application
+--index.php
subdomains
+--management
+--httpdocs
+--application
+--index.php
$application = 'application';
$modules = '/root/pathto/modules';
$system = '/root/pathto/system';