我正在编写的应用程序有一组用户,我们称他们为社区。每个社区都有会议,会议也有一些与之相关的对象(与会者、目标、任务、成就等)。
对于在创建父对象时实现初始化子对象的最佳方法,我有点困惑。这是一个简化的类设置。
首次实施
<?php
class community
{
public $id;
public $name;
//Store an array of meeting objects
public $meetings = array();
//Store an array of member objects
public $members = array();
//etc
public function getProperties()
{
//hit database for community properties including ids of meetings
//and members associated with this community
//Set community properties
//Use returned ids to populate community properties
foreach($returnedMeetingIds as $meetingId)
{
//The meeting class is responsible for its own init.
$newMeeting = new Meeting();
$newMeeting->id = $meetingId;
$newMeeting->getProperties();
$this->meetings[$meetingId] = $newMeeting;
}
}
}
?>
这种方法将初始化的责任放在每个对象上,我认为这对可维护性和模块化更好,但我可以看到这是一个巨大的级联瓶颈,因为添加了更多会议,因为每个会议的子对象也将负责初始化自己。
我能想到的另一种方法是使用单个数据库调用填充 $meetings 数组。所有会议都存储在具有社区 ID 字段的单个表中。
二次实施
<?php
class community
{
public $id;
public $name;
//Store an array of meeting objects
public $meetings = array();
//Store an array of member objects
public $members = array();
//etc
public function getProperties()
{
$sql = 'SELECT *
FROM meetings
WHERE community_id = :community'
//etc
$stmt->execute();
while($meeting = $stmt->fetch())
{
$newMeeting = new Meeting();
$newMeeting->id = $meeting['id'];
//etc
$this->meetings[$newMeeting->id] = $newMeeting;
}
}
}
?>
我相信第二堂课会执行得更快,但我现在将会议班与社区班结合起来,感觉这不是最好的解决方案。
我的问题是在将这些类组(社区、会议、目标、成就、任务等)解耦时应该放置多少库存?我个人的感觉是,我应该使用第一个实现,直到证明它不适合我的流量负载,然后再转向第二个实现。我想知道有更多经验的人发现什么是最佳实践。我觉得这是一个兔子洞,一旦我下去,以后可能很难重构。此外,我不相信任何一种方法都是解决这个问题的正确方法。非常感谢您提供的任何帮助!