我们有一个forum_threads
和forum_posts
表。Posts连接到线程。一个用户想用第一个帖子开始一个新线程,所以:
class ForumPostModel
{
public function open ($topic, $firstComment)
{
$newThreadId = ForumThreadModel::createNew ($topic); // this will return with the ID of the new thread
return $this->insertInto ($newThreadId, $firstComment);
}
}
这个伪代码显示了首先插入一个线程并获取它的ID,然后向它插入注释并返回新的ID。除了缺少交易和检查之外,这段代码并不"干净",不是吗?把它放在哪里?对于控制器,我不这么认为。
将数据库逻辑放在哪里取决于您现在的系统架构是什么。
将业务逻辑和数据库逻辑分离到不同的层中是一种很好的方法。拥有一个服务层(域门面和用于访问它们的精简接口集合)也很好,您可以在其中操作不同的域模型。因此,可以决定将上述代码放入应用程序的服务层。
服务层
我建议你读一下Martin Fowler的《企业应用架构模式》