【发布时间】:2011-04-10 13:52:16
【问题描述】:
我正在尝试使用 OO 设计来改进一些 PHP 脚本(现在它是带有一些 OO 部分的程序)。为了清楚起见,我不是在尝试构建完整的 MVC 应用程序,而是在尝试尽可能多地分离各个部分。我以前从未在 PHP 中使用过 MVC(在 Java 中只使用过一点点)。
在使用 Google 时,我发现了 100 种不同的 PHP MVC 方法,但我找不到关于这个主题的好书。如果有人能给我推荐一本关于 PHP OO 设计的好书,将不胜感激。
目前,将用户添加到数据库的部分(假设用户现在只包含名字),如下所示(users.php):
$validator = new UserValidator();
if ($validator->validate($_POST['user_firstname']))
$result = $db->execute("INSERT INTO `users` (`user_firstname`) VALUES (?)", $_POST['user_firstname']);
知道添加用户可能在多个地方完成并且我不希望代码重复,我将创建一个用户模型。此类将包含一个方法 addUser()。我有点坚持的是验证。 UserValidator 会检查所有字段是否填写正确。
我可以这样做:
$validator = new UserValidator();
if ($validator->validate($_POST['user_firstname']))
$result = $user->addUser($_POST['user_firstname']);
但我也可以这样做:
$result = $user->adduser($_POST['user_firstname'];
现在用户类将包含验证器,addUser() 方法将执行此验证。假设上面的代码是控制器,什么选项是最好的?将验证功能委托给模型还是在控制器中执行?
在获取某个用户的信息时也会出现同样的问题。不是每个人都能得到这些信息,所以我的代码可能如下所示:
if ($user->hasAccess($_SESSION['id'], $_GET['id'])
$user->getUserById($_GET'id']);
(hasAccess()-方法会检查登录的用户是否可以查看某个用户id的详细信息)
但我也可以调用 getUserById() 并检查您是否有权访问该方法。哪个选项最好?
谢谢!
【问题讨论】:
标签: php oop model-view-controller design-patterns