我想为我的php控制器实现一个真正的模式MVC。特别是,我想通过在PHP(用于业务组织的对象)中创建等效的Java“ bean”和使用这些业务对象的API来拆分模型和API。
例如,我的基本对象是会员。问题是:我在哪里请求数据库?我是否在__construct上要求所有成员的属性,并且只使用getter访问它们,或者在__construct中什么也不做,并且在每个getter函数中调用数据库?人们告诉我,第一种解决方案更好,但是,如果我只想在控制器中提供特定信息,我将创建一个Member,其中包含在构造时就计算出的所有信息(错误的内存管理)。在第二种情况下,如果我想要几个成员属性,我将执行几个SQL请求,这将增加服务器执行时间。
第一种解决方案:
public function __construct($ID_membre,$sql)
{
$this->ID_membre = $ID_membre;
$res = mysql_get("select * from membres where ID_membre = $ID_membre",$sql);
if(!$res)
throw new Exceptions\MyDefaultException("no member for this Id");
$this->firstName = $res['first_name'];
$this->lastName = $res['last_name'];
$this->mail = $res['mail'];
$this->gender = $res['gender'];
// ....
$this->sql = $sql;
}
public function getLastName()
{
return $this->lastName;
}
public function getMail()
{
return $this->mail;
}
public function getGender()
{
return $this->gender;
}
// ....
第二解决方案:
public function __construct($ID_membre,$sql)
{
$this->ID_membre = $ID_membre;
$res = mysql_get("select count(*) from membres where ID = $ID_membre",$sql);
if($res == 0)
throw new Exceptions\MyDefaultException("no member with this id");
$this->sql = $sql;
}
public function getLastName()
{
mysql_get("select name from members where ID = {$this->id}",$this->sql);
return $this->lastName;
}
public function getMail()
{
mysql_get("select mail from members where ID = {$this->id}",$this->sql);
return $this->mail;
}
public function getGender()
{
mysql_get("select gender from members where ID = {$this->id}",$this->sql);
return $this->gender;
}
在这种情况下,控制器中良好的旧SQL自定义请求非常适合不浪费时间或内存,因为它们是习俗。那么,为什么今天这样的请求被如此糟糕地看待呢?并且,如果Fb或Google这样的大型组织使用数据库进行MVC,那么在拆分模型和控制器时如何不浪费任何时间/内存呢?
慕尼黑5688855