作为大多自学成才的程序员,我迟到了比赛,当谈到设计模式和这样的。 我正在写使用笨劳动管理Web应用程序。
我上学时有点MVC ASP.NET/C#和Java,以及该公约是你的模型主要由那代表实际的对象类,但也抽象所有的数据库连接和这样的......这是非常标准的MVC的东西从我所收集的。
我想我说得对CI完全抽象的数据库连接的视线(除非你去寻找),这是意料之中的事,和模型,您可以创建可以抽象的“通用” CRUD方法更多一点创建一些方法,这些方法的具体型号更有用。
我有一个问题,因为它是什么,我已经习惯了使用MVC不同,问题是,每当你说......从数据库返回一行,惯例是把它放在一个关联数组或者标准体与表示该行中的数据的属性。
在ASP中你必须实际类,您可以构造来存储这些信息。 例如你有一个House
类和数据将被存储为属性(如bedrooms
, bathrooms
, address
)和方法将是有用的东西,你可以对数据进行修改(比如printInfo()
可以print("$address has $bedrooms bedrooms and $bathrooms bathrooms!')
我得到的印象 - 刚刚从代码中,我已经看到在互联网 - 这不是做事情的标准方式。 你应该只使用数组或通用对象,并说... DO $this->house_model->print_info($houseobject)
代替$houseobject->print_info();
?
谢谢。
尽管有相反的主张,笨完全不使用MVC(事实上,只有极少数的web框架做的!),它实际上采用了PAC(演示抽象控制)架构。 本质上,在PAC表示层是由演示者(其笨调用控制器)和MVC中的查看从模型获取其自己的数据馈送的数据。 这种混乱的存在,因为这个标签错误MVC的。
因此,笨(和大多数其他流行的Web框架的)不鼓励适当的模型,但只是用非常简陋的数据访问它的位置。 这将导致大量套,因为“脂肪控制器”的问题。 其涉及该域的代码中没有一个成为可重复使用的。
延伸阅读:
这是在PHP社区(的MVC与PAC文章识别问题,因为从PHP社区。这是写在2006年并没有什么而产生改变混乱的一个普遍问题,如果有的话,因为有更多的框架和教程它变得更糟教学MVC的错误定义。)为什么人在看“MVC” PHP代码谁有来自后台的Web开发以外理解变得混乱。 在PHP中最“MVC”实现不是MVC。 你思想的模型正确,应适当的结构,它的笨这是错误的标签本身作为MVC。
笨是非常灵活的,当谈到遵循MVC模式,这真的取决于你多么想执行它。 大多数笨的代码,你会发现网上也正是像你描述的,该模型只是一个方法收集真的,不尽力严格表示一个对象。
你可以,但是,代码的方式太多,如果你这么喜欢内CI(这是我经常做的)。 这使得代码更容易维护和可读性,只是似乎更好。
PS -如果你刚刚进入MVC在PHP中,你可能要环顾一下四周。 像笨和CakePHP框架是上一代的(有点)。 CI最初是写给PHP4其中OOP支持是在PHP有点参差不齐。 CI的叉子,被称为燃料 ,是专门为解决这个问题(虽然我认为在某些时候,他们只是决定他们将从头开始重写其可以更好的服务)。 CI确实有有很多文档的优势和在线帮助,因为它比燃油更广泛的应用。
调节器
// get the houses result from the model
// return it as an object
if( ! $houses = $this->house_model->findHouses($search) )
{ // if no results - call a no results view
$this->load->view( 'no_results', $data );
}
else
{
// pass the houses object to data so it automatically goes to view
data['houses'] = $houses ;
// Call your view
$this->load->view( 'house_results', $data );
}
视图
// we already know we have at least one house,
// thats what the controller is for, so we dont need to do an isset() etc for $houses
foreach $houses as $house :
echo 'This fine house at ' . $house->address . 'has '. $house->bedrooms . ' bedrooms and ' $house->bathrooms . ' bathrooms' ;
endforeach ;
显然有不同的方式来创建认为最后一句,但这个想法是,到时候,我们得到的看法 - 它尽可能简单。
所以对于像复杂的查询,告诉我所有的房子的好学校旁边,设有两间卧室和客房为我的宠物豹猫。 那是在模型中会发生什么。 所有的杂乱状况和业务规则。 意见要具体 - 如果你没有结果 - 然后就显示没有结果视图。 对战 - 做一个导致数据视图中查看,然后改变基于没有结果的显示。 你使视图更具体,越容易将是打造出来的,它会鼓励你在控制器和模型的选择。