MVC框架内的持久对象

时间:2012-09-03 16:00:17

标签: php model-view-controller frameworks persistent

我正在编写自己的PHP MVC框架,我想知道哪个是最适合编写持久数据对象的地方,例如用户。没有持久存储,如$ _SESSION,APC,memcached,......有人可以从每个http请求中检索数据库中的用户数据,这在性能方面是个坏主意。 (M)奥德尔似乎是个不错的选择。这样的事情是一个好的开始:

class UserModel extends Model
{
  public function getEmail()
  {
    $user = Session::get('User');
    if(isset($user))
    {
      return $user->Email;
    }
    return null;
  }
}

可能不是,因为它没有返回大多数模型所做的数据库数据。我应该创建一个独立的班级吗?这有什么模式吗?我不想让它成为全球性的,谁是这些对象的所有者/经理?

1 个答案:

答案 0 :(得分:2)

您的模型应该只对业务逻辑进行建模。它们不应与用户交互有任何关系。这是控制器(和视图)的工作。会话完全在用户交互领域。所以不要在模型中使用它们。始终假设您将使用命令行中的模型或其他不存在会话的上下文。这应该会告诉您很多应用程序的设计。

您可以在各个阶段实施缓存,以减少主数据存储的负载。您应该有一个模型层服务层,它表示您应用的核心逻辑。此图层具有已定义的API,您可以使用该API在应用中执行操作。也许在幕后,层使用内存缓存等在内部缓存一些数据,以减少数据库的负载 然后你应该有一个视图层,它从模型层获取数据并将其可视化。该视图层可以缓存从某个模型层接收的数据。

最大的收获:妥善分离您的疑虑。请参阅N-Tier Architecture - An Introduction,这可能会为您提供更多想法。