我应该在域模型中放置验证码还是将其保留在外部?

时间:2011-02-24 19:00:31

标签: php oop

我正在处理一些用户注册码,我想知道放置验证码的最佳位置。我可以创建一个用户验证对象并将用户模型传递给它进行验证,或者我可以在用户模型中实例化验证对象,甚至将验证代码写入用户模型,但是,我认为这将是浪费,因为验证对象/代码仅在注册和编辑用户数据时使用。因此,我倾向于将用户验证对象保持在外部。有人可以告诉我最佳做法是什么吗?感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

一般来说,我会说让用户模型负责维护自己的有效性。将这些不变量放在模型本身中。然后, nothing 可以使用户处于无效状态,而不仅仅是您当前的创建和编辑功能。

答案 1 :(得分:2)

我通常将我的验证代码与MVC应用程序中的模型代码分开。基本上我的所有模型都假设传递给它们的数据已经是干净/正确的。这允许更可读的模型代码,以及验证代码的更多集中/重用。

答案 2 :(得分:0)

我倾向于将验证代码与模型分开。实际上,它与界面的代码更相关。

创建模型时,无法确定界面。也许你将有2个或更多的形式来处理单个对象的数据:

                                    ---------
                                    | Form1 |
---------       -------------   /   ---------
| model |   -   | Validator |
---------       -------------   \   ---------
                                    | Form2 |
                                    ---------

如果验证器绑定到模型,则不能支持多个表单。假设您有两个表单的验证器。然后你可能会得到一些非常有趣的消息。例如,“字段X是必需的”并且让用户想知道地球X在哪里。 (字段X是另一种形式......)

因此,从这个角度来看,这个解决方案更好:

                --------------     ---------
                | Validator1 |  -  | Form1 |
---------  /    --------------     ---------
| model |  
---------  \    --------------     ---------
                | Validator2 |  -  | Form2 |
                --------------     ---------